OILS / stdlib / README.md View on Github | oilshell.org

169 lines, 107 significant
1stdlib/
2=======
3
4Ideas for shell functions that could be in here:
5
6- Version comparison: https://github.com/oilshell/oil/issues/683
7- An automated way to download the latest version of Oil: https://github.com/oilshell/oil/issues/463
8 - Maybe functions to lazily download documentation too?
9- `errexit` utilities: https://github.com/oilshell/oil/issues/474
10
11## Notes on Contents
12
13This should be in doc/ref/chap-stdlib.md
14
15 two.sh # The two functions I actually use
16 byo-server-lib.sh # for using bash to test scripts
17 # you need a client too
18
19YSH
20
21 args.ysh
22 testing.ysh # should these be assertions?
23
24 stream.ysh
25 table.ysh
26
27 math.ysh # abs, max, min - TODO: sum
28 list.ysh # any all sum
29 funcs.ysh # identity - not that useful
30
31 prelude.ysh # todo pass, hm
32
33## What We Actually Use in Oils
34
35 source stdlib/two.sh # I definitely use this
36 source stdlib/bash-strict.sh # inherit_errexit
37
38 source stdlib/taskfile.sh # questionable?
39 # needs function docstring support
40 # needs file docstring support
41
42 source stdlib/byo-server-lib.sh # convert more of these
43
44## Task Files Templates
45
46Problem: user scripts wouldn't run under bash:
47
48 # Docstring
49 source --builtin bash-strict.sh
50 source --builtin two.sh
51 source --builtin taskfile.sh
52
53 foo() {
54 echo todo
55 }
56
57 taskfile "$@"
58
59Test:
60
61 # Docstring
62 source --builtin bash-strict.sh
63 source --builtin two.sh
64 source --builtin byo-server-lib.sh
65
66 source test/common.sh # assertions
67
68 test-foo() {
69 echo TODO
70 }
71
72 byo-maybe-main
73
74Command usage:
75
76 byo test stdlib/TEST.sh
77
78I think that is reasonable.
79
80Polyglot:
81
82 if test -n "${OILS_VERSION:-}"; then
83 prefix='--builtin '
84 else
85 prefix='stdlib'
86 fi
87
88 source ${prefix}two.sh
89 source ${prefix}bash-strict.sh
90
91Honestly I think this is better.
92
93 # Bootstrapping trick, to
94 # To avoid self-hosting
95 if test -z "${OILS_VERSION:-}"; then
96 OSH_LIB='stdlib'
97 fi
98
99 source $OSH_LIB/bash-strict.sh
100 source $OSH_LIB/two.sh
101 source $OSH_LIB/taskfile.sh
102
103 source $OSH_LIB/byo-server-lib.sh
104
105 # source /osh-lib/foo # refers to the actual directory
106
107 source $OSH_LIB/bash-strict.sh
108 source ///osh-lib/bash-strict.sh
109
110 # Does not work - this refers to a real dir
111 source /osh-lib/bash-strict.sh
112
113
114 use $YSH_LIB/args.ysh { pick parser }
115
116 use $YSH_LIB/arg-parser.ysh
117 arg-parser (&x) {
118 flag --fo x
119 flag --fo x
120 }
121
122 use $YSH_LIB/table.ysh { pick table split-by }
123
124Repo:
125
126 oils/
127 stdlib/
128 osh/
129 two.sh
130 bash-strict.sh
131 taskfile.sh
132 ysh/
133 args.ysh
134 table.ysh
135 stream.ysh
136
137
138
139## Polyfill ideas
140
141### From Soil - Fix SSH and Bernstein chaining
142
143 ssh $USER@$HOST "$(argv-to-str "$@")"
144
145which is simply:
146
147 ssh $USER@$HOST "$(printf '%q ' "$@")"
148
149Though it would be more convenient as:
150
151 quotefix ssh $USER@$HOST --- "$@"
152
153The --- means you are ending the normal args?
154
155
156Do we also need one for scp? On OS X it seems more weird.
157
158### exit 255 for xargs?
159
160That's the special exit code to ABORT, hm.
161
162But I think 'each' will not do this? We should concentrate on that.
163
164
165### strict mode
166
167Not sure it makes sense to source anything for this.
168
169 shopt --set strict:all || true 2>&/dev/null