]> git.ipfire.org Git - thirdparty/bash.git/commitdiff
commit bash-20201230 snapshot
authorChet Ramey <chet.ramey@case.edu>
Thu, 7 Jan 2021 19:25:24 +0000 (14:25 -0500)
committerChet Ramey <chet.ramey@case.edu>
Thu, 7 Jan 2021 19:25:24 +0000 (14:25 -0500)
CWRU/CWRU.chlog
command.h
execute_cmd.c
jobs.c
nojobs.c
po/hr.gmo
po/hr.po
sig.c
subst.c
trap.c

index 35fccd181f831b904ee5d05dc006618f0ecd79c9..ad5d27d96cacbdccdb3c775c0ec77ac4a6bdbd19 100644 (file)
@@ -9260,3 +9260,37 @@ examples/loadables/stat.c
 
 examples/loadables/Makefile.in
        - stat: now built and installed by default
+
+                                  12/31
+                                  -----
+command.h
+       - SUBSHELL_IGNTRAP: new flag value
+
+jobs.c
+       - make_child: set SUBSHELL_IGNTRAP in subshell_environment in the
+         child process, meaning that we should not execute trap handlers for
+         trapped signals
+
+execute_cmd.c
+       - execute_in_subshell, execute_simple_command, execute_disk_command:
+         make sure to unset SUBSHELL_IGNTRAP after a child process restores
+         the original signal dispositions
+       - execute_simple_command: make sure to set SUBSHELL_IGNTRAP after
+         make_child returns and we're setting subshell_environment directly
+
+subst.c
+       - command_substitute,process_substitute: unset SUBSHELL_IGNTRAP after
+         the child process has reset the trapped signal dispositions
+
+trap.c
+       - trap_handler: if we get a signal for which we have set a trap, but
+         SUBSHELL_IGNTRAP is set in subshell_environmnent, make sure we
+         restore the original signal disposition and resend the signal to
+         ourselves. Fixes issue reported by Nikolay Borisov <nborisov@suse.com>
+         (or at least makes the race window much smaller)
+
+sig.c
+       - initialize_terminating_signal: set the original signal handler from
+         the return value from sigaction; a minor optimization that saves a
+         system call or two
+
index 914198f9d4da00993de9f02415d45fb9b0622b1f..b84775280d032c7a435f1e2ea50d7236674e4f71 100644 (file)
--- a/command.h
+++ b/command.h
@@ -124,6 +124,7 @@ enum command_type { cm_for, cm_case, cm_while, cm_if, cm_simple, cm_select,
 #define SUBSHELL_PROCSUB 0x20  /* subshell caused by <(command) or >(command) */
 #define SUBSHELL_COPROC        0x40    /* subshell from a coproc pipeline */
 #define SUBSHELL_RESETTRAP 0x80        /* subshell needs to reset trap strings on first call to trap */
+#define SUBSHELL_IGNTRAP 0x100  /* subshell should reset trapped signals from trap_handler */
 
 /* A structure which represents a word. */
 typedef struct word_desc {
index 3d13277306c31ff28455b98a01b82019bf3a0f65..6d37a39705cdbbfd710c73c948f2327d81fa4ee7 100644 (file)
@@ -1547,6 +1547,9 @@ execute_in_subshell (command, asynchronous, pipe_in, pipe_out, fds_to_close)
   clear_pending_traps ();
   reset_signal_handlers ();
   subshell_environment |= SUBSHELL_RESETTRAP;
+  /* Note that signal handlers have been reset, so we should no longer
+    reset the handler and resend trapped signals to ourselves. */
+  subshell_environment &= ~SUBSHELL_IGNTRAP;
 
   /* We are in a subshell, so forget that we are running a trap handler or
      that the signal handler has changed (we haven't changed it!) */
@@ -4332,7 +4335,8 @@ execute_simple_command (simple_command, pipe_in, pipe_out, async, fds_to_close)
          already_forked = 1;
          cmdflags |= CMD_NO_FORK;
 
-         subshell_environment = SUBSHELL_FORK;         /* XXX */
+         /* We redo some of what make_child() does with SUBSHELL_IGNTRAP */
+         subshell_environment = SUBSHELL_FORK|SUBSHELL_IGNTRAP;        /* XXX */
          if (pipe_in != NO_PIPE || pipe_out != NO_PIPE)
            subshell_environment |= SUBSHELL_PIPE;
          if (async)
@@ -4586,6 +4590,7 @@ run_builtin:
             trap strings if we run trap to change a signal disposition. */
          reset_signal_handlers ();
          subshell_environment |= SUBSHELL_RESETTRAP;
+         subshell_environment &= ~SUBSHELL_IGNTRAP;
 
          if (async)
            {
@@ -5526,6 +5531,7 @@ execute_disk_command (words, redirects, command_line, pipe_in, pipe_out,
       reset_terminating_signals ();    /* XXX */
       /* Cancel traps, in trap.c. */
       restore_original_signals ();
+      subshell_environment &= ~SUBSHELL_IGNTRAP;
 
 #if defined (JOB_CONTROL)
       FREE (p);
diff --git a/jobs.c b/jobs.c
index 83c48a936900738f9f084773f872ad05c8d48340..49a862e160ef649135a48c8da7e36eb58d0f2df2 100644 (file)
--- a/jobs.c
+++ b/jobs.c
@@ -2220,6 +2220,8 @@ make_child (command, flags)
         signals to the default state for a new process. */
       pid_t mypid;
 
+      subshell_environment |= SUBSHELL_IGNTRAP;
+
       /* If this ends up being changed to modify or use `command' in the
         child process, go back and change callers who free `command' in
         the child process when this returns. */
index c5fc83d90a1538fd7d50fd898662219ec272c003..f2563ca09b8a4e1e88cf819747378d663fe86fcf 100644 (file)
--- a/nojobs.c
+++ b/nojobs.c
@@ -575,6 +575,8 @@ make_child (command, flags)
        last_asynchronous_pid = getpid ();
 #endif
 
+      subshell_environment |= SUBSHELL_IGNTRAP;
+
       default_tty_job_signals ();
     }
   else
index 0f2fdb084f90f57c8ca6f757ee107216d36fb710..a7506358e5e6744cdf20bab7dcf18a78068eca9c 100644 (file)
Binary files a/po/hr.gmo and b/po/hr.gmo differ
index d0cdad0c1a92a1bacf019acd4985fc57f26fd356..f68280b6b9629bc712a33da53a28c6f14786f94d 100644 (file)
--- a/po/hr.po
+++ b/po/hr.po
@@ -3,13 +3,13 @@
 # This file is distributed under the same license as the bash package.
 #
 # Tomislav Krznar <tomislav.krznar@gmail.com>, 2012, 2013.
-# Božidar Putanec <bozidarp@yahoo.com>, 2018, 2019, 2020.
+# Božidar Putanec <bozidarp@yahoo.com>, 2018, 2019, 2020, 2021.
 msgid ""
 msgstr ""
 "Project-Id-Version: bash 5.1\n"
 "Report-Msgid-Bugs-To: \n"
 "POT-Creation-Date: 2020-11-28 12:51-0500\n"
-"PO-Revision-Date: 2020-12-29 11:38-0800\n"
+"PO-Revision-Date: 2021-01-02 13:56-0800\n"
 "Last-Translator: Božidar Putanec <bozidarp@yahoo.com>\n"
 "Language-Team: Croatian <lokalizacija@linux.hr>\n"
 "Language: hr\n"
@@ -774,7 +774,7 @@ msgid ""
 msgstr ""
 "Doda direktorij na vrh stȏga direktorija ili zarotira stȏg tako da\n"
 "    učini novi vrh stȏga trenutnim radnim direktorijem. Bez argumenata\n"
-"    razmijeni pozicije dva direktorija na vrhu stȏga.\n"
+"    razmijeni pozicije dvama direktorijima na vrhu stȏga.\n"
 "\n"
 "    Opcije:\n"
 "      -n   spriječi uobičajenu promjenu direktorija kad dodaje\n"
@@ -810,8 +810,9 @@ msgid ""
 "    \n"
 "    The `dirs' builtin displays the directory stack."
 msgstr ""
-"Ukloni direktorije iz stȏga direktorija. Bez argumenata, ukloni\n"
-"    direktorij na vrhu stȏga i premjesti se u novi najviši direktorij.\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"
 "      -n   spriječi uobičajenu promjenu direktorija kad uklanja\n"
@@ -2334,7 +2335,7 @@ msgstr ""
 msgid "jobs [-lnprs] [jobspec ...] or jobs -x command [args]"
 msgstr ""
 "jobs [-lnprs] [SPECIFIKACIJA_POSLA...]\n"
-" ili: jobs -x NAREDBA [ARGUMENTI]"
+" ili: jobs -x NAREDBA [ARGUMENT...]"
 
 #: builtins.c:131
 msgid "disown [-h] [-ar] [jobspec ... | pid ...]"
@@ -2431,7 +2432,7 @@ msgstr "wait [PID...]"
 
 #: builtins.c:184
 msgid "for NAME [in WORDS ... ] ; do COMMANDS; done"
-msgstr "for IME [in RIJEČIMA .... do NAREDBE; done"
+msgstr "for IME [in RIJEČIMA...].; do NAREDBE; done"
 
 #: builtins.c:186
 msgid "for (( exp1; exp2; exp3 )); do COMMANDS; done"
@@ -2439,7 +2440,7 @@ msgstr "for (( IZRAZ1; IZRAZ2; IZRAZ3 )); do NAREDBE; done"
 
 #: builtins.c:188
 msgid "select NAME [in WORDS ... ;] do COMMANDS; done"
-msgstr "select IME [in RIJEČI ....; do NAREDBE; done"
+msgstr "select IME [in RIJEČI... ;] do NAREDBE; done"
 
 #: builtins.c:190
 msgid "time [-p] pipeline"
@@ -2489,7 +2490,7 @@ msgstr "[[ IZRAZ ]]"
 
 #: builtins.c:212
 msgid "variables - Names and meanings of some shell variables"
-msgstr "varijable — imena i značenje nekih varijabla ljuske"
+msgstr "var — imena i značenje nekih varijabla ljuske"
 
 #: builtins.c:215
 msgid "pushd [-n] [+N | -N | dir]"
@@ -2532,13 +2533,13 @@ 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]"
 msgstr ""
-"mapfile [-d MEĐA] [-n BROJ] [-O POČETAK] [-s BROJ] [-t] [-u FD]\n"
+"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]"
 msgstr ""
-"readarray [-d MEĐA] [-n BROJ] [-O POČETAK] [-s BROJ] [-t] [-u FD]\n"
+"readarray [-d MEĐA] [-n KOLIČINA] [-O POČETAK] [-s BROJ] [-t] [-u FD]\n"
 "                     [-C FUNKCIJA] [-c TOLIKO] [POLJE]"
 
 #: builtins.c:256
@@ -2561,11 +2562,11 @@ msgid ""
 msgstr ""
 "Definira ili prikaže aliase.\n"
 "\n"
-"    Bez argumenata, „alias“ ispiše popis aliasa na standardni izlaz u\n"
-"    upotrebljivom formatu: 'alias IME=ZAMJENA'. S argumentima, alias je\n"
-"    definiran za svako IME za koje je navedena ZAMJENA. Ako ZAMJENA završi\n"
-"    s razmakom (bjelinom), onda alias pri ekspanziji provjeri da li je i\n"
-"    sljedeća riječ alias.\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"
+"    Zaostali razmak (bjelina) u ZAMJENI čini da „alias“ prilikom ekspanzije\n"
+"    provjerava je li i sljedeća riječ zamjenska.\n"
 "\n"
 "    Options:\n"
 "      -p       ispiše sve definirane aliase u upotrebljivom formatu\n"
@@ -2632,7 +2633,7 @@ msgstr ""
 "\n"
 "    Opcije:\n"
 "      -f DATOTEKA        pročita prečace (bindings, key sequences) iz DATOTEKE\n"
-"      -l                 ispiše sve poznate funkcije\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"
 "                         emacs-meta, emacs-ctlx, vi, vi-move, vi-command,\n"
@@ -2641,13 +2642,13 @@ msgstr ""
 "      -p                 ispiše imena funkcija i prečaca u obliku\n"
 "                           koji se može iskoristiti kao ulaz\n"
 "      -r PREČAC          razveže PREČAC (ukloni sekvenciju tipki za prečac)\n"
-"      -q FUNKCIJA        ispita i ispiše tipke koje pozivaju navedenu FUNKCIJU\n"
+"      -q FUNKCIJA        ispita i ispiše tipke koje pozivaju tu FUNKCIJU\n"
 "      -S                 izlista prečace (sekvencije tipki) koje pozivaju makroe\n"
 "                           s njihovim vrijednostima\n"
 "      -s                 ispiše sekvencije tipki poje pozivaju makroe s\n"
 "                           njihovim vrijednostima u obliku koji se može\n"
 "                           iskoristiti kao ulaz\n"
-"      -u FUNKCIJA        razveže sve prečace vezane na navedenu FUNKCIJU\n"
+"      -u FUNKCIJA        razveže sve prečace vezane na tu FUNKCIJU\n"
 "      -V                 izlista imena varijabli s njihovim vrijednostima\n"
 "      -v                 ispiše imena varijabli s njihovim vrijednostima\n"
 "                           u formatu koji se može iskoristiti kao ulaz\n"
@@ -2705,14 +2706,14 @@ msgid ""
 msgstr ""
 "Izvrši ugrađenu funkciju ljuske (shell builtins).\n"
 "\n"
-"    Izvrši danu UGRAĐENU_SHELL_FUNKCIJU (SHELL-BUILTIN) funkciju s navedenim\n"
-"    ARGUMENTIMA. To je korisno ako želite redefinirati implementaciju\n"
-"    ugrađene shell funkcije kao vlastitu shell funkciju (skriptu s istim\n"
-"    imenom kao ugrađena shell funkcija), a potrebna vam je funkcionalnost\n"
-"    te ugrađene shell funkcije unutar vaše vlastite skripte (shell funkcije).\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"
+"    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 (shell builtin)."
+"    UGRAĐENA_SHELL_FUNKCIJA nije ugrađene funkcija ljuske."
 
 #: builtins.c:369
 msgid ""
@@ -2729,14 +2730,14 @@ msgid ""
 "    Returns 0 unless the shell is not executing a shell function or EXPR\n"
 "    is invalid."
 msgstr ""
-"Pokaže kontekst trenutnog poziva funkciji.\n"
+"Vrati kontekst trenutnog poziva funkciji.\n"
 "\n"
-"    Bez IZRAZA, vrati „$line $filename“. Ako je dan IZRAZ, vrati\n"
-"    „$line $subroutine $filename“; ova dodatna obavijest može 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 treba vratiti unatrag od\n"
-"    trenutne pozicije, s time da je pozicija 0 trenutna pozicija.\n"
+"    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."
@@ -2780,7 +2781,7 @@ msgstr ""
 "Promjeni trenutni direktorij.\n"
 "\n"
 "    Promijeni trenutni direktorij u navedeni DIREKTORIJ. Ako DIREKTORIJ nije\n"
-"    naveden, onda se za DIREKTORIJ koristi vrijednost varijable HOME.\n"
+"    naveden, za DIREKTORIJ se koristi vrijednost varijable HOME.\n"
 "\n"
 "    Varijabla CDPATH definira staze (direktorije) po kojima se\n"
 "    traži DIREKTORIJ.\n"
@@ -2794,12 +2795,11 @@ msgstr ""
 "    naziv, „cd“ prijeđe u direktorij s tim nazivom.\n"
 "\n"
 "    Opcije:\n"
-"      -L    slijedi simboličke veze; simboličke veze u DIREKTORIJU\n"
-"              razriješi nakon procesiranja „..“ instancije DIREKTORIJA;\n"
-"              opcija „-L“ je aktivna u zadanom (početnom) stanju\n"
-"      -P    rabi fizičku strukturu direktorija umjesto da slijedi\n"
-"              simboličke veze; simboličke veze DIREKTORIJA\n"
-"              razriješi prije procesiranja „..“ instancije DIREKTORIJA\n"
+"      -L    slijedi simboličke veze; simboličke veze u DIREKTORIJU razriješi\n"
+"              nakon obrade zapisa „..“\n"
+"      -P    rabi fizičku strukturu direktorija umjesto da slijedi simboličke\n"
+"              veze; simboličke veze u DIREKTORIJU razriješi prije obrade\n"
+"              zapisa „..“\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"
 "              „cd“ završi s kȏdom različitim od 0.\n"
@@ -2893,8 +2893,8 @@ msgstr ""
 "    Opcije:\n"
 "      -p   rabi zadanu vrijednost za PATH kao garanciju\n"
 "             pronalaženja svih standardnih programa\n"
-"      -v   ispiše opis NAREDBE, slično kao „type“ builtin\n"
-"      -V   ispiše opširniji opis svake navedene NAREDBE\n"
+"      -v   pokaže ime naredbe koja bi se izvršila\n"
+"      -V   == „-v” ali opširnije\n"
 "\n"
 "    Završi s izlaznim kȏdom NAREDBE\n"
 "    ili s 1 ako NAREDBA nije pronađena."
@@ -2947,9 +2947,9 @@ msgstr ""
 "    Opcije:\n"
 "      -f   prikaže samo definirane funkcije (ne prikaže varijable)\n"
 "      -F   prikaže samo imena funkcija bez definicija\n"
-"      -g   kreira globalne varijable samo za upotrebu u funkciji ljuske;\n"
+"      -g   stvori globalne varijable samo za upotrebu u funkciji ljuske;\n"
 "             inače se ignoriraju\n"
-"      -I   ako kreira 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"
@@ -2984,7 +2984,7 @@ msgid ""
 msgstr ""
 "Postavi vrijednosti i svojstva varijabli.\n"
 "\n"
-"    Sinonim za „declare“.  Za detalje, bez navodnika, utipkajte „help declare“."
+"    Sinonim za „declare“.  Za detalje utipkajte (bez navodnika) „help declare“."
 
 #: builtins.c:540
 msgid ""
@@ -3002,14 +3002,14 @@ msgid ""
 msgstr ""
 "Definira lokalne varijable.\n"
 "\n"
-"    Stvori lokalnu varijablu IME i dodijeli joj vrijednost. OPCIJA\n"
-"    može biti bilo koja od opcija koju prihvaća naredba „declare“.\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\n"
-"    vidljive su samo toj funkciji i njezinim potomcima.\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\n"
-"    se dogodila greška pri dodijeli ili ljuska ne izvrši funkciju."
+"    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
 msgid ""
@@ -3144,7 +3144,7 @@ msgstr ""
 "\n"
 "    Primjer: da koristite binarnu datoteku „test“ koja se nalazi na stazi\n"
 "    pretraživanja PATH, umjesto ugrađene (test) naredbe, utipkajte\n"
-"    bez navodnika „enable -n test“.\n"
+"    (bez navodnika) „enable -n test“.\n"
 "\n"
 "    Završi s uspjehom osim ako IME nije ugrađena naredba ili se nije\n"
 "    dogodila greška."
@@ -3210,7 +3210,7 @@ msgstr ""
 "\n"
 "    „getopts” se može koristiti u skriptama za raščlanjivanje\n"
 "    pozicijskih parametara kao opcija.\n"
-"    \n"
+"\n"
 "    STRING_OPCIJA sadrži slova opcije koje treba prepoznati; ako iza\n"
 "    slova slijedi dvotočka, očekuje se da opcija ima argument koji treba\n"
 "    biti bjelinom odvojen od opcije.\n"
@@ -3223,11 +3223,11 @@ msgstr ""
 "    ljuskinu varijablu OPTARG.\n"
 "\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 (ne ispisuje poruke o greškama).\n"
-"    Ako naiđe na nevaljanu opciju, getopts smjesti nađeni znak opcije u OPTARG.\n"
-"    Ako zahtijevani argument nije pronađen, getopts smjesti „:“ u IME i postavi\n"
-"    OPTARG na pronađeni znak opcije. Ako getopts ne radi tiho i naiđe na\n"
-"    nevaljanu opciju, getopts smjesti „?“ u IME i poništi OPTARG.\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"
+"    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"
 "    OPTARG i ispiše poruku o greškama.\n"
 "\n"
@@ -3262,14 +3262,14 @@ msgid ""
 msgstr ""
 "Zamjeni ljusku s danom naredbom.\n"
 "\n"
-"    Izvrši danu NAREDBU, zamijenivši ovu ljusku s ovim programom.\n"
+"    Izvrši danu NAREDBU, zamjenjujući ovu ljusku s ovim programom.\n"
 "    Eventualni ARGUMENTI postanu argumenti NAREDBE. Ako NAREDBA nije\n"
 "    specificirana, sva preusmjeravanja se dogode u trenutnoj ljusci.\n"
 "\n"
 "    Opcije:\n"
 "      -a IME   dȁde IME kao nulti argument NAREDBI\n"
 "      -c       izvrši NAREDBU u praznoj okolini\n"
-"      -l       uvrsti spojnicu („-“) na početak nultog argumenta NAREDBE\n"
+"      -l       proslijedi crticu („-“) kao nulti argument NAREDBE\n"
 "\n"
 "    Ako se naredba ne može izvršiti, ne-interaktivna ljuska završi,\n"
 "    osim ako je aktivna opcija ljuske „execfail“.\n"
@@ -3365,8 +3365,8 @@ msgstr ""
 "    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\n"
-"    ili s neuspjehom ako se dogodi greška."
+"    Završi s kȏdom trenutne naredbe u prednjem planu ili s neuspjehom ako se\n"
+"    dogodi greška."
 
 #: builtins.c:779
 msgid ""
@@ -3448,7 +3448,7 @@ msgid ""
 "    Exit Status:\n"
 "    Returns success unless PATTERN is not found or an invalid option is given."
 msgstr ""
-"Prikaže podatke o ugrađenim (builtin) naredbama.\n"
+"Prikaže podatke o ugrađenim (builtins) naredbama.\n"
 "\n"
 "    Prikaže kratke sažetke o ugrađenim naredbama. Ako je specificiran\n"
 "    UZORAK, prikaže detaljnu pomoć za sve naredbe koje podudaraju UZORAK;\n"
@@ -3457,10 +3457,10 @@ msgstr ""
 "    Opcije:\n"
 "      -d   ukratko opisano djelovanje naredbe\n"
 "      -m   prikaže uporabu u pseudo manpage formatu\n"
-"      -s   prikaže samo sinopsis 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\n"
-"    nevaljana opcija."
+"    Završi s uspjehom osim ako UZORAK nije pronađen, ili je dana nevaljana\n"
+"    opcija."
 
 #: builtins.c:842
 msgid ""
@@ -3502,30 +3502,31 @@ msgstr ""
 "    ispiše samo N posljednjih redaka povijesti.\n"
 "\n"
 "    Opcije:\n"
-"      -c   počisti povijest iz memorije; zaboravi sve izvršene naredbe\n"
-"      -d   POZICIJA  izbriše redak povijesti na POZICIJI\n"
+"      -c   izbriše povijest iz memorije; zaboravi sve izvršene naredbe\n"
+"      -d   POZICIJA  izbriše redak povijesti na toj POZICIJI. Negativna\n"
+"           POZICIJA odbrojava od kraja popisa.\n"
 "\n"
-"      -a   pripoji trenutnu povijest „povijesnoj“ datoteci\n"
-"      -n   pripoji sve nepročitane retke povijesne datoteke\n"
+"      -a   doda trenutnu povijest „povijesnoj“ datoteci\n"
+"      -n   doda sve nepročitane retke povijesne datoteke\n"
 "             trenutnom popisu povijesti\n"
-"      -r   pročita i pripoji povijesnu datoteku\n"
+"      -r   pročita i doda povijesnu datoteku\n"
 "             trenutnom popisu povijesti\n"
 "      -w   trenutnu povijest zapiše u povijesnu datoteku\n"
 "\n"
 "      -p   proširi povijest na svakom ARGUMENTU i prikaže rezultat\n"
 "             bez spremanja u povijesni popis\n"
-"      -s   Pripoji ARGUMENTE popisu povijesti kao pojedinačne stavke \n"
+"      -s   doda ARGUMENTE kao jednu stavku popisu povijesti\n"
 "\n"
-"    Kao povijesna datoteka koristi se DATOTEKA ako je dana; ako nije dana,\n"
-"    koristi se varijabla HISTFILE (ako ima vrijednost), inače se koristi\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"
 "    Ako HISTTIMEFORMAT varijabla postoji i nije nula, njezinu vrijednost\n"
 "    koristi strftime(3) kao format string za ispis vremenskih oznaka\n"
 "    povijesnih stavki; inače, vremenske oznake se ne ispisuju.\n"
 "\n"
-"    Završi s uspjehom osim ako nije dana nevaljana opcija\n"
-"    ili se dogodila greška."
+"    Završi s uspjehom osim ako nije dana nevaljana opcija ili se dogodila\n"
+"    greška."
 
 #: builtins.c:879
 msgid ""
@@ -3563,8 +3564,8 @@ 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 poslova navedenih u ARGUMENTIMA (tj. njihov ID procesa\n"
-"    zamijenjen je s ID-om njima nadređenog procesa).\n"
+"    zatvaranja svih navedenih poslova u ARGUMENTIMA (tj. njihov ID procesa je\n"
+"    zamijenjen s ID-om njima nadređenoga procesa).\n"
 "\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."
@@ -3624,9 +3625,9 @@ msgid ""
 msgstr ""
 "Pošalje signal poslu.\n"
 "\n"
-"    Pošalje procesu, identificiranim PID-om ili SPECIFIKACIJOM_POSLA,\n"
-"    signal naveden brojem ili imenom. Ako nije navedeno ni ime ni broj,\n"
-"   „kill” pošalje SIGTERM.\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"
+"    SIGTERM.\n"
 "\n"
 "    Opcije:\n"
 "      -s IME          IME je ime signala koji se šalje\n"
@@ -3634,15 +3635,14 @@ msgstr ""
 "      -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              isto kao -l\n"
+"      -L              == -l\n"
 "\n"
 "    „kill“ je ugrađena ljuskina naredba iz dva razloga: dopušta korištenje\n"
 "    ID posla umjesto ID procesa i također dopušta ubiti procese iako\n"
 "    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\n"
-"    ili se dogodila greška."
+"    Završi s uspjehom osim ako je dana nevaljana opcija ili se dogodila greška."
 
 #: builtins.c:949
 msgid ""
@@ -3693,22 +3693,22 @@ 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\n"
-"    istom retku, a redci su poredani po opadajućoj prednosti.\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"
 "        ++var, --var    pre-inkrement, pre-dekrement varijable\n"
 "        -, +            unarni minus, unarni plus\n"
-"        !, ~            logička i bitna negacija\n"
+"        !, ~            logička i bitwise negacija\n"
 "        **              potenciranje\n"
 "        *, /, %         množenje, dijeljenje, ostatak dijeljenja\n"
 "        +, -            zbrajanje, oduzimanje\n"
-"        <<, >>          pomak za bit ulijevo i udesno\n"
+"        <<, >>          bitwise pomak ulijevo, udesno\n"
 "        <=, >=, <, >    usporedba\n"
 "        ==, !=          jednako, nejednako\n"
-"        &               vrednuje aritmetičke izraze AND\n"
-"        ^               bitni XOR\n"
-"        |               bitni OR\n"
+"        &               bitwise AND\n"
+"        ^               bitwise XOR\n"
+"        |               bitwise OR\n"
 "        &&              logički AND\n"
 "        ||              logički OR\n"
 "\n"
@@ -3794,7 +3794,7 @@ msgstr ""
 "      -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 BROJ 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"
 "                   Ako je BROJ = 0, „read“ završi odmah bez da išta čita, a\n"
@@ -3805,8 +3805,7 @@ msgstr ""
 "\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\n"
-"      kao argument opciji „-u“."
+"      naveden nevaljani deskriptor datoteke kao argument opciji „-u“."
 
 #: builtins.c:1041
 msgid ""
@@ -3819,7 +3818,7 @@ msgid ""
 "    Exit Status:\n"
 "    Returns N, or failure if the shell is not executing a function or script."
 msgstr ""
-"Povrat iz funkcije ljuske.\n"
+"Vračanje iz funkcije ljuske.\n"
 "\n"
 "    Učini da funkcija ili pokrenuta skripta završi sa izlaznom vrijednošću\n"
 "    specificiranom s N. Ako N nije dan, završi s kȏdom zadnje naredbe\n"
@@ -3930,7 +3929,7 @@ msgstr ""
 "            (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 dugačke nazive IMENA_OPCIJA)\n"
+"      -o  IME_OPCIJE  omogući tu opciju (v. niže dugačke nazive za IME_OPCIJE)\n"
 "      -P  ne razriješi simboličke veze 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"
@@ -3954,34 +3953,34 @@ msgstr ""
 "    pozicijski i dodijeljeni su u $1, $2, .. $N.\n"
 "\n"
 "    Dugački nazivi za IME_OPCIJE koji se koriste s opcijom -o (ili +o)\n"
-"      allexport    isto kao -a\n"
-"      braceexpand  isto kao -B (zamjena vitičastih zagrada)\n"
+"      allexport    == -a\n"
+"      braceexpand  == -B (zamjena vitičastih zagrada)\n"
 "      emacs        za uređivanje redaka koristi sučelje u „emacs“ stilu\n"
-"      errexit      isto kao -e\n"
-"      errtrace     isto kao -E\n"
-"      functrace    isto kao -T\n"
-"      hashall      isto kao -h\n"
-"      histexpand   isto kao -H\n"
+"      errexit      == -e\n"
+"      errtrace     == -E\n"
+"      functrace    == -T\n"
+"      hashall      == -h\n"
+"      histexpand   == -H\n"
 "      history      omogući naredbu „history“\n"
 "      ignoreeof    ignorira Ctrl-D; ne završi (ne iziđe iz) ljusku na EOF\n"
 "      interactive-comments  dopusti komentiranje u interaktivnim naredbama\n"
-"      keyword      isto kao -k\n"
-"      monitor      isto kao -m\n"
-"      noclobber    isto kao -C\n"
-"      noexec       isto kao -n\n"
-"      noglob       isto kao -f\n"
-"      nolog        (prepoznata, ali se ignorira)\n"
-"      notify       isto kao -b\n"
-"      nounset      isto kao -u\n"
-"      onecmd       isto kao -t\n"
-"      physical     isto kao -P\n"
+"      keyword      == -k\n"
+"      monitor      == -m\n"
+"      noclobber    == -C\n"
+"      noexec       == -n\n"
+"      noglob       == -f\n"
+"      nolog        (prepoznata, ali je zanemarena)\n"
+"      notify       == -b\n"
+"      nounset      == -u\n"
+"      onecmd       == -t\n"
+"      physical     == -P\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   isto kao -p\n"
-"      verbose      isto kao -v\n"
+"      privileged   == -p\n"
+"      verbose      == -v\n"
 "      vi           za uređivanje redaka koristi sučelje u „vi“ stilu\n"
-"      xtrace       isto kao -x\n"
+"      xtrace       == -x\n"
 "\n"
 "    Završi s uspjehom osim ako je dana nevaljana opcija."
 
@@ -4019,8 +4018,8 @@ msgstr ""
 "    ne uspije, onda pokuša ukloniti funkciju. Neke varijable nije moguće\n"
 "    ukloniti; pogledajte „readonly.\n"
 "\n"
-"    Završi s uspjehom osim ako je dana nevaljana opcija\n"
-"    ili IME je „samo-za-čitanje“."
+"    Završi s uspjehom osim ako je dana nevaljana opcija ili IME je\n"
+"    „samo-za-čitanje“. (bez navodnika)"
 
 #: builtins.c:1161
 msgid ""
@@ -4088,7 +4087,7 @@ msgstr ""
 "      -p  prikaže popis svih nepromjenjivih varijabli ili funkcija\n"
 "            ovisno o opciji „-f“ (je li ili nije dana).\n"
 "\n"
-"    Argument „--“ onemogući daljnje procesiranje opcija.\n"
+"    Argument „--“ onemogući daljnje obrađivanje opcija.\n"
 "\n"
 "    Završi s uspjehom osim ako je dana nevaljana opcija ili je IME nevaljano."
 
@@ -4557,9 +4556,9 @@ msgid ""
 "    Exit Status:\n"
 "    Returns success unless MODE is invalid or an invalid option is given."
 msgstr ""
-"Prikaže ili postavi masku prilikom kreiranje datoteke.\n"
+"Prikaže ili postavi masku prilikom stvaranja datoteke.\n"
 "\n"
-"    Postavi masku datoteke koju kreira korisnik na MODE.\n"
+"    Postavi masku datoteke koju stvori korisnik na MODE.\n"
 "    Ako MODE nije naveden, ispiše trenutnu vrijednost maske.\n"
 "\n"
 "    Ako MODE počinje sa znamenkom, interpretira se kao oktalni broj;\n"
@@ -4652,9 +4651,9 @@ msgstr ""
 "Izvrši naredbe za svakoga člana u popisu.\n"
 "\n"
 "    Petlja „for“ izvrši sekvenciju naredbi za svakoga člana u popisu stavki.\n"
-"    Ako nema operanda „in RIJEČI ...., podrazumijeva se operand\n"
+"    Ako nema operanda „in RIJEČIMA...; podrazumijeva se operand\n"
 "    „in \"$@\"“. Svakom elementu u RIJEČIMA, IME se postavi na taj element\n"
-"    i izvrše se NAREDBE.\n"
+"    i NAREDBE se izvrše.\n"
 "\n"
 "    Završi s kȏdom zadnje izvršene naredbe."
 
@@ -4712,9 +4711,9 @@ msgstr ""
 "    Nakon izbornika prikaže se PS3 prompt i redak se čita iz standardnoga\n"
 "    ulaza; ako se redak sastoji od broja koji odgovara jednoj od prikazanih\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 „select“\n"
-"    naredba završi s poslom. Bilo koja druga vrijednost koja se pročita učini\n"
-"    da se IME isprazni (nulira). Pročitani redak spremi se u varijablu REPLY.\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"
+"    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"
 "    ne prekine posao.\n"
 "\n"
@@ -4784,10 +4783,10 @@ msgstr ""
 "    Izvrši naredbe iza „if“; ako to završi s kȏdom 0, izvrši naredbe\n"
 "    iza prvog „then“; inače, izvrši naredbe iza sljedećeg „elif“\n"
 "    (ako postoji) ili „else“ (ako postoji). Ako „elif“ završi s kȏdom\n"
-"    nula, izvrši naredbe iza odgovarajućeg „then“. Ako više nema „elif“,\n"
+"    nula, izvrši naredbe iza odgovarajućeg „then“. Ako nema više „elif“,\n"
 "    ili „else“ ili nakon izvršenih naredbi iza „then“, „if“ naredba završi.\n"
 "\n"
-"    „if“ završi s kȏdom zadnjeg izvršenoga zadatka."
+"    „if“ završi s kȏdom zadnje izvršene naredbe."
 
 #: builtins.c:1647
 msgid ""
@@ -4801,8 +4800,8 @@ msgid ""
 msgstr ""
 "Izvršava naredbe tako dugo dok je test uspješan.\n"
 "\n"
-"    Izvršava sukcesivne NAREDBE tako dugo dok zadnja naredba u\n"
-"    „while“ NAREDBAMA završava s kȏdom 0.\n"
+"    Izvršava sukcesivne NAREDBE tako dugo dok zadnja naredba u „while“\n"
+"    NAREDBAMA završava s kȏdom 0.\n"
 "\n"
 "    Završi s kȏdom zadnje izvršene naredbe."
 
@@ -4835,7 +4834,7 @@ msgid ""
 "    Exit Status:\n"
 "    The coproc command returns an exit status of 0."
 msgstr ""
-"Kreira coprocess (suproces) s imenom IME.\n"
+"Stvori koproces nazvan IME.\n"
 "\n"
 "    Izvrši NAREDBU asinkrono, sa standardnim izlazom i standardnim ulazom\n"
 "    naredbe spojene preko cijevi na deskriptore datoteke dodijeljene\n"
@@ -4858,7 +4857,7 @@ msgid ""
 msgstr ""
 "Definira funkciju ljuske.\n"
 "\n"
-"    Kreira funkciju ljuske nazvanu IME. Kad se pokrene kao jednostavna\n"
+"    Stvori funkciju ljuske nazvanu IME. Kad se pokrene kao jednostavna\n"
 "    naredba, IME izvrši NAREDBE unutar konteksta pozivne ljuske.\n"
 "    Kad se IME pozove, argumenti se proslijede funkciji kao $1...$N,\n"
 "    a ime funkcije je $FUNCNAME.\n"
@@ -5102,7 +5101,7 @@ msgstr ""
 "\n"
 "    Doda direktorij na vrh stȏga direktorija ili zarotira stȏg tako da\n"
 "    učini novi vrh stȏga trenutnim radnim direktorijem. Bez argumenata\n"
-"    razmijeni pozicije dvaju direktorija na vrhu stȏga.\n"
+"    razmijeni pozicije dvama direktorijima na vrhu stȏga.\n"
 "\n"
 "    Opcije:\n"
 "      -n   izostavi uobičajenu promjenu direktorija kad dodaje\n"
@@ -5118,8 +5117,8 @@ msgstr ""
 "\n"
 "      Naredba „dirs“ prikaže trenutni sadržaj stȏga direktorija.\n"
 "\n"
-"    Završi s uspjehom osim ako je dana nevaljana opcija\n"
-"    ili nije uspjela promjena direktorija."
+"    Završi s uspjehom osim ako je dana nevaljana opcija ili promjena\n"
+"    direktorija nije uspjela"
 
 #: builtins.c:1855
 msgid ""
@@ -5149,8 +5148,9 @@ msgid ""
 msgstr ""
 "Ukloni direktorije iz stȏga.\n"
 "\n"
-"    Ukloni direktorije iz stȏga direktorija. Bez argumenata, ukloni\n"
-"    direktorij na vrhu stȏga i premjesti se u novi najviši direktorij.\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"
 "      -n   izostavi uobičajenu promjenu direktorija kad uklanja\n"
@@ -5166,8 +5166,8 @@ msgstr ""
 "\n"
 "    Naredba „dirs“ prikaže trenutni sadržaj stȏga direktorija.\n"
 "\n"
-"    Završi s uspjehom osim ako je dana nevaljana opcija\n"
-"    ili nije uspjela promjena direktorija."
+"    Završi s uspjehom osim ako je dana nevaljana opcija ili promjena\n"
+"    direktorija nije uspjela."
 
 #: builtins.c:1885
 msgid ""
@@ -5299,7 +5299,7 @@ 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"
@@ -5379,8 +5379,8 @@ msgstr ""
 "Prikaže moguća kompletiranja ovisno o opcijama.\n"
 "\n"
 "    „compgen“ je namijenjen za upotrebu unutar funkcije koja generira\n"
-"    moguća kompletiranja. Ako je dana neobvezna opcija RIJEČ, generira\n"
-"    samo moguća kompletiranja podudarna s opcijom RIJEČ.\n"
+"    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."
 
@@ -5412,18 +5412,18 @@ msgid ""
 "    Returns success unless an invalid option is supplied or NAME does not\n"
 "    have a completion specification defined."
 msgstr ""
-"Izmjeni ili pokaže opcije za kompletiranje.\n"
+"Promijeni ili pokaže opcije za kompletiranje.\n"
 "\n"
-"    Izmijeni opcije kompletiranja za svako IME u skladu s opcijama,\n"
+"    Promijeni opcije kompletiranja za svako IME u skladu s opcijama,\n"
 "    ili za kompletiranje koje se trenutno vrši ako nisu navedena IMENA.\n"
-"    Ako nema opcija, ispišu se opcije kompletiranja za svako IME ili\n"
-"    za trenutno kompletiranje.\n"
+"    Ako nema opcija, ispiše opcije kompletiranja za svako IME ili za\n"
+"    trenutno kompletiranje.\n"
 "\n"
 "    Opcije:\n"
-"      -o OPCIJA   ovu OPCIJU kompletiranja postavi za svako IME\n"
-"      -D          promijeni opcije za kompletiranje „zadanih“ naredba\n"
-"      -E          promijeni opcije za kompletiranje „praznih“ naredba\n"
-"      -I          promijeni opcije za kompletiranje za početnu riječ\n"
+"      -o OPCIJA   omogući ovu OPCIJU kompletiranja za svako IME\n"
+"      -D          promijeni opcije za „zadano” kompletiranje\n"
+"      -E          promijeni opcije za kompletiranje „prazne“ naredbe\n"
+"      -I          promijeni opcije za kompletiranje na početnu riječ\n"
 "\n"
 "    „+“ umjesto „-“ isključi odgovarajuću opciju.\n"
 "\n"
@@ -5433,8 +5433,8 @@ 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\n"
-"    ili nije definirana specifikacija za kompletiranje IMENA."
+"    Završi s uspjehom osim ako nije dana nevaljana opcija ili nije definirana\n"
+"    specifikacija za kompletiranje IMENA."
 
 #: builtins.c:2047
 msgid ""
@@ -5472,13 +5472,13 @@ msgid ""
 msgstr ""
 "Pročitane retke iz standardnoga ulaza upiše u varijablu indeksirano polje.\n"
 "\n"
-"    Pročitane retke iz standardnog ulaza (ili, ako je navedena -u opcija iz\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"
 "    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 BROJ      kopira ne više od BROJ redaka (0 znači sve retke)\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"
 "      -s BROJ      preskoči (izostavi) prvih BROJ redaka\n"
 "      -t           ukloni zaostalu MEĐU (zadano LF) iz svakog učitanog retka\n"
@@ -5506,7 +5506,7 @@ msgid ""
 "    \n"
 "    A synonym for `mapfile'."
 msgstr ""
-"Učita retke iz datoteke u varijablu vrste indeksirano polje.\n"
+"Učita retke iz datoteke u varijablu indeksirano polje.\n"
 "\n"
 "    Sinonim za „mapfile“."
 
diff --git a/sig.c b/sig.c
index 6964d862cb76e15e207720e20dcfefcb6d20600c..e6537d2673b5db7b3d6c43c7afbe11dd9a262b58 100644 (file)
--- a/sig.c
+++ b/sig.c
@@ -55,7 +55,8 @@
 #  include "bashhist.h"
 #endif
 
-extern void initialize_siglist ();
+extern void initialize_siglist PARAMS((void));
+extern void set_original_signal PARAMS((int, SigHandler *));
 
 #if !defined (JOB_CONTROL)
 extern void initialize_job_signals PARAMS((void));
@@ -255,6 +256,13 @@ initialize_terminating_signals ()
       sigaction (XSIG (i), &act, &oact);
       XHANDLER(i) = oact.sa_handler;
       XSAFLAGS(i) = oact.sa_flags;
+
+#if 0
+      set_original_signal (XSIG(i), XHANDLER(i));      /* optimization */
+#else
+      set_original_signal (XSIG(i), act.sa_handler);   /* optimization */
+#endif
+
       /* Don't do anything with signals that are ignored at shell entry
         if the shell is not interactive. */
       /* XXX - should we do this for interactive shells, too? */
diff --git a/subst.c b/subst.c
index 9401161bfc322219007336417b896b94b07d31b3..1b20b8c8c051177830b71e9082e1447a9e3f475e 100644 (file)
--- a/subst.c
+++ b/subst.c
@@ -5951,6 +5951,7 @@ process_substitute (string, open_for_read_in_child)
       free_pushed_string_input ();
       /* Cancel traps, in trap.c. */
       restore_original_signals ();     /* XXX - what about special builtins? bash-4.2 */
+      subshell_environment &= ~SUBSHELL_IGNTRAP;
       QUIT;    /* catch any interrupts we got post-fork */
       setup_async_signals ();
 #if 0
@@ -6382,6 +6383,7 @@ command_substitute (string, quoted, flags)
        }       
       QUIT;    /* catch any interrupts we got post-fork */
       subshell_environment |= SUBSHELL_RESETTRAP;
+      subshell_environment &= ~SUBSHELL_IGNTRAP;
     }
 
 #if defined (JOB_CONTROL)
diff --git a/trap.c b/trap.c
index c7f8ded56f7dbe20d4178853bca0f478bad6efbb..1b27fb3a3a8c1918f93e30e05a3a924e31ff92cd 100644 (file)
--- a/trap.c
+++ b/trap.c
@@ -481,6 +481,32 @@ trap_handler (sig)
       SIGRETURN (0);
     }
 
+  /* This means we're in a subshell, but have not yet reset the handler for
+     trapped signals. We're not supposed to execute the trap in this situation;
+     we should restore the original signal and resend the signal to ourselves
+     to preserve the Posix "signal traps that are not being ignored shall be
+     set to the default action" semantics. */
+  if ((subshell_environment & SUBSHELL_IGNTRAP) && trap_list[sig] != (char *)IGNORE_SIG)
+    {
+      sigset_t mask;
+
+      /* Paranoia */
+      if (original_signals[sig] == IMPOSSIBLE_TRAP_HANDLER)
+       original_signals[sig] = SIG_DFL;
+
+      restore_signal (sig);
+
+      /* Make sure we let the signal we just caught through */
+      sigemptyset (&mask);
+      sigprocmask (SIG_SETMASK, (sigset_t *)NULL, &mask);
+      sigdelset (&mask, sig);
+      sigprocmask (SIG_SETMASK, &mask, (sigset_t *)NULL);
+
+      kill (getpid (), sig);
+
+      SIGRETURN (0);
+    }
+
   if ((sig >= NSIG) ||
       (trap_list[sig] == (char *)DEFAULT_SIG) ||
       (trap_list[sig] == (char *)IGNORE_SIG))