diff --git a/Programs/CosmOS/README.md b/Programs/CosmOS/README.md index 08e3d1f..1b7332a 100644 --- a/Programs/CosmOS/README.md +++ b/Programs/CosmOS/README.md @@ -156,6 +156,48 @@ comment that only the kernel looks at, while here the shell requires it. **Each line is echoed as it runs**, after the prompt, so that a script reads exactly like somebody typing it and a script that stops says where. +**`#quiet` turns that off and `#loud` turns it back on.** The prompt and the echo go together, +because together they are what makes a script look like typing - so a quiet script gets +neither, and what it prints is all that appears. That is for the scripts whose own output is +the point, where prompts interleaved with the message are just in the way: + +``` +#! script +#quiet +clear +echo Segan Voyager +echo CosmOS ready. +``` + +A nested script inherits quiet from the one that started it, on the grounds that a build which +asked for quiet meant its helpers too, and gets its own setting back when the helper returns. +A script started from the prompt always begins loud. + +**Anything else beginning with `#` is handed to the shell**, which does not know it, says so, +and stops the script. A script that asked for something this shell cannot do should not carry +on as though it had been given it. + +## Starting Itself: + +If `/System/Boot/startup.sh` is there, it runs before anybody can type - every way of reaching +the prompt for the first time goes through it, including the one where there is no disk, in +which case there is simply nothing to find. + +**A missing one says nothing**, because a clean install has none and a machine that complained +every boot about a file nobody wrote would be teaching its owner to ignore it. A file that *is* +there and does not begin with `#!` is the other case entirely - somebody meant that to run - so +it says so and carries on to the prompt. + +Between them, `startup.sh` and `#quiet` are how a machine gets a face: + +``` +#! script +#quiet +clear +echo Segan Voyager +echo CosmOS ready. +``` + **A script stops at the first line that does not work.** A build whose first step failed and whose second step ran anyway produces something wrong and reports success, which is the whole reason the shell now remembers whether a line worked. What counts as not working is a command @@ -191,6 +233,7 @@ CosmOS currently provides these built-in commands: | `run [words]` | Start the loaded application and make the rest of the line available to it as an argument. | | `do