Add command substitution
[minish.git] / Devember / log07.txt
blob103b5bb21428574be2f4194696f285b7d6364f70
1 A shell is a read-eval-print loop.
2 I would like each of these parts to be a separate programs.
3 Today I separated the “read-eval-print” part from the “loop” part.
4 The program minish-once interprets a single command
5 and execv()s into it.
6 The program minish calls minish-once in a loop by fork()ing
7 and making the child execv() into it.
9 In script mode, minish uses dup2() to redirect its stdin,
10 so that minish-once can just read from it.
12 When minish-once cannot read from stdin, it raise()s SIGHUP.
13 As minish does not ignore SIGHUP,
14 if it detects that the child has terminated because of SIGHUP
15 it means that one of the following happened:
16 • the child has been kill()ed with SIGHUP;
17 • the child has connected to another terminal which closed;
18 • the child has raise()d SIGHUP.
19 The first two are not impossible.
21 I think this use of SIGHUP is a bad idea.
22 I need another way for the child to tell the parent
23 that there is no input anymore,
24 so that the shell can terminate.
26 My alternatives ideas are signaling minish or using a pipe.
27 Signaling minish would be a great idea
28 if there already were a signal to make it exit cleanly,
29 but there is not.
30 When a process is signaled and it handles the signal,
31 it should do cleanup and then raise that signal again.
32 If using a pipe,
33 should minish wait() first and then read() from the pipe,
34 or the other way around?
35 That is a question for tomorrow.
37 Enough for today.
39 Suggested reading:
40 https://ewontfix.com/11/