X-Git-Url: https://git.librecmc.org/?a=blobdiff_plain;f=shell%2Fhush_doc.txt;h=c68dc2416be089ccf482f9701e04a06435e0d92e;hb=1825e4f935f8e9ef9685766ab60659d78602c906;hp=39f7dcee5f59b567f82c6e6ca0063d3df3df7738;hpb=38c89210d6b7ffdd4e1c67686559b8b4c33611c7;p=oweals%2Fbusybox.git diff --git a/shell/hush_doc.txt b/shell/hush_doc.txt index 39f7dcee5..c68dc2416 100644 --- a/shell/hush_doc.txt +++ b/shell/hush_doc.txt @@ -2,9 +2,10 @@ Command parsing -Command parsing results in "pipe" structures. "Pipe" structure -does not always correspond to what sh language calls "pipe", -it also controls execution of if, while, etc statements. +Command parsing results in a list of "pipe" structures. +This list correspond not only to usual "pipe1 || pipe2 && pipe3" +lists, but it also controls execution of if, while, etc statements. +Every such statement is a list for hush. List consists of pipes. struct pipe fields: smallint res_word - "none" for normal commands, @@ -18,7 +19,7 @@ Blocks of commands { pipe; pipe; } and (pipe; pipe) are represented as one pipe struct with one progs[0] element which is a "group" - struct child_prog can contain a list of pipes. Sometimes these "groups" are created implicitly, e.g. every control -statement (if, while, etc) sits inside its own "pipe" struct). +statement (if, while, etc) sits inside its own group. res_word controls statement execution. Examples: @@ -41,6 +42,10 @@ res_word=NONE followup=SEQ pipe 4 res_word=NONE followup=(null) pipe 1 res_word=NONE followup=SEQ +Above you see that if is a list, and it sits in a {} group +implicitly created by hush. Also note two THEN res_word's - +it is explained below. + "if true; then { echo Hello; true; }; fi" - pipe 0 res_word=NONE followup=SEQ prog 0 group {}: