OILS / spec / builtin-umask.test.sh View on Github | oils.pub

449 lines, 272 significant
1## compare_shells: dash bash mksh zsh
2## oils_failures_allowed: 4
3
4#### 'umask' prints the umask
5umask | tail --bytes 4 # 0022 versus 022
6echo status=$?
7
8## STDOUT:
9022
10status=0
11## END
12
13#### 'umask -S' prints symbolic umask
14umask -S | grep 'u=[rwx]*,g=[rwx]*,o=[rwx]*'
15echo status=$?
16
17## STDOUT:
18u=rwx,g=rx,o=rx
19status=0
20## END
21
22#### 'umask -p' prints a form that can be eval'd
23umask -p
24echo status=$?
25
26## STDOUT:
27umask 0022
28status=0
29## END
30## N-I mksh/zsh STDOUT:
31status=1
32## END
33## N-I dash STDOUT:
34status=2
35## END
36
37#### 'umask 0002' sets the umask
38umask 0002
39echo one > $TMP/umask-one
40
41umask 0022
42echo two > $TMP/umask-two
43
44stat -c '%a' $TMP/umask-one $TMP/umask-two
45
46## status: 0
47## STDOUT:
48664
49644
50## END
51## stderr-json: ""
52
53#### set umask with symbolic mode: g-w,o-w
54
55umask 0002 # begin in a known state for the test
56# open()s 'umask-one' with mask 0666, then subtracts 0002 -> 0664
57echo one > $TMP/umask-one
58
59umask g-w,o-w
60echo two > $TMP/umask-two
61
62stat -c '%a' $TMP/umask-one $TMP/umask-two
63
64## status: 0
65## STDOUT:
66664
67644
68## END
69## stderr-json: ""
70
71#### set umask with symbolic mode: u-rw ... u=,g+,o- ...
72
73umask 0000
74umask u-rw
75echo status0=$?
76umask | tail -c 4
77
78umask 0700
79umask u=r
80echo status1=$?
81umask | tail -c 4
82
83umask 0000
84umask u=r,g=w,o=x
85echo status2=$?
86umask | tail -c 4
87
88umask 0777
89umask u+r,g+w,o+x
90echo status3=$?
91umask | tail -c 4
92
93umask 0000
94umask u-r,g-w,o-x
95echo status4=$?
96umask | tail -c 4
97
98umask 0137
99umask u=,g+,o-
100echo status5=$?
101umask | tail -c 4
102
103## status: 0
104## STDOUT:
105status0=0
106600
107status1=0
108300
109status2=0
110356
111status3=0
112356
113status4=0
114421
115status5=0
116737
117## END
118
119#### umask with too many arguments (i.e. extra spaces)
120umask 0111
121# spaces are an error in bash
122# dash & mksh only interpret the first one
123umask u=, g+, o-
124if test $? -ne 0; then
125 echo ok
126fi
127umask | tail -c 4
128## status: 0
129## STDOUT:
130ok
131111
132## END
133## BUG dash/mksh STDOUT:
134711
135## END
136
137#### umask bad symbolic input
138umask b=rwx
139## status: 1
140## OK dash status: 2
141
142#### umask octal number out of range
143umask 0022
144umask 1234567
145# osh currently treats 0o1234567 as 0o0567
146echo status=$?
147umask | tail -c 4
148## status: 0
149## STDOUT:
150status=1
151022
152## END
153## BUG mksh/zsh/dash STDOUT:
154status=0
155567
156## END
157
158#### umask allow overwriting and duplicates
159umask 0111
160umask u=rwx,u=rw,u=r,u=,g=rwx
161umask | tail -c 4
162## status: 0
163## STDOUT:
164701
165## END
166
167#### umask a is valid who
168umask 0732
169umask a=rwx
170umask | tail -c 4
171
172umask 0124
173umask a+r
174umask | tail -c 4
175
176umask 0124
177umask a-r
178umask | tail -c 4
179## status: 0
180## STDOUT:
181000
182120
183564
184## END
185
186#### umask X perm
187umask 0124
188umask a=X
189echo ret0 = $?
190umask | tail -c 4
191
192umask 0246
193umask a=X
194echo ret1 = $?
195umask | tail -c 4
196
197umask 0246
198umask a-X
199echo ret2 = $?
200umask | tail -c 4
201## status: 0
202## STDOUT:
203ret0 = 0
204666
205ret1 = 0
206777
207ret2 = 0
208246
209## END
210## BUG dash/mksh STDOUT:
211ret0 = 0
212666
213ret1 = 0
214666
215ret2 = 0
216357
217## END
218## N-I bash/zsh STDOUT:
219ret0 = 1
220124
221ret1 = 1
222246
223ret2 = 1
224246
225## END
226
227#### umask s perm
228umask 0124
229umask a-s
230echo ret0 = $?
231umask | tail -c 4
232
233umask 0124
234umask a+s
235echo ret1 = $?
236umask | tail -c 4
237
238umask 0124
239umask a=s
240echo ret2 = $?
241umask | tail -c 4
242## status: 0
243## STDOUT:
244ret0 = 0
245124
246ret1 = 0
247124
248ret2 = 0
249777
250## END
251## N-I bash/zsh STDOUT:
252ret0 = 1
253124
254ret1 = 1
255124
256ret2 = 1
257124
258## END
259
260#### umask t perm
261umask 0124
262umask a-t
263echo ret0 = $?
264umask | tail -c 4
265
266umask 0124
267umask a+t
268echo ret1 = $?
269umask | tail -c 4
270
271umask 0124
272umask a=t
273echo ret2 = $?
274umask | tail -c 4
275## status: 0
276## STDOUT:
277ret0 = 0
278124
279ret1 = 0
280124
281ret2 = 0
282777
283## END
284## N-I bash/zsh/mksh STDOUT:
285ret0 = 1
286124
287ret1 = 1
288124
289ret2 = 1
290124
291## END
292## N-I dash STDOUT:
293ret0 = 2
294124
295ret1 = 2
296124
297ret2 = 2
298124
299## END
300
301#### umask default who
302umask 0124
303umask =
304umask | tail -c 4
305
306umask 0124
307umask =rx
308echo ret = $?
309umask | tail -c 4
310
311umask 0124
312umask +
313umask | tail -c 4
314
315umask 0124
316# zsh ALSO treats this as just `umask`
317umask - >/dev/null
318umask | tail -c 4
319## status: 0
320## BUG zsh status: 1
321## STDOUT:
322777
323ret = 0
324222
325124
326124
327## END
328## BUG zsh STDOUT:
329777
330## END
331
332#### umask bare op
333umask 0124
334umask =+=
335umask | tail -c 4
336
337umask 0124
338umask +=
339umask | tail -c 4
340
341umask 0124
342umask =+rwx+rx
343umask | tail -c 4
344## status: 0
345## BUG zsh status: 1
346## STDOUT:
347777
348777
349000
350## END
351## N-I bash STDOUT:
352124
353124
354124
355## END
356## BUG zsh STDOUT:
357## END
358
359#### umask bare op -
360umask 0124
361umask -rwx
362umask | tail -c 4
363
364umask 0124
365umask -wx
366umask | tail -c 4
367
368umask 0124
369umask -=+
370umask | tail -c 4
371## status: 0
372## STDOUT:
373777
374337
375777
376## END
377## N-I dash/bash/mksh/zsh STDOUT:
378124
379124
380124
381## END
382
383#### umask permcopy
384umask 0124
385umask a=u
386umask | tail -c 4
387
388umask 0365
389umask a=g
390umask | tail -c 4
391
392umask 0124
393umask a=o
394umask | tail -c 4
395## status: 0
396## STDOUT:
397111
398666
399444
400## END
401## N-I bash/zsh STDOUT:
402124
403365
404124
405## END
406
407#### umask permcopy running value
408umask 0124
409umask a=,a=u
410umask | tail -c 4
411
412umask 0124
413umask a=
414umask a=u
415umask | tail -c 4
416## status: 0
417## STDOUT:
418111
419777
420## END
421## N-I bash/zsh STDOUT:
422124
423777
424## END
425
426#### umask sequential actions
427umask 0124
428umask u+r+w+x
429umask | tail -c 4
430
431umask 0124
432umask a+r+w+x,o-w
433umask | tail -c 4
434
435umask 0124
436umask a+x+wr-r
437umask | tail -c 4
438## status: 0
439## STDOUT:
440024
441002
442444
443## END
444## N-I bash/zsh STDOUT:
445124
446124
447124
448## END
449