src.elv.sh@v0.21.0-dev.0.20240515223629-06979efb9a2a/pkg/mods/unix/umask_test.elvts (about) 1 //each:eval use unix 2 3 /////////// 4 # parsing # 5 /////////// 6 7 ## implicit octal ## 8 ~> set unix:umask = 23 9 put $unix:umask 10 ▶ 0o023 11 12 ## explicit base prefixes ## 13 ~> set unix:umask = 0o75 14 put $unix:umask 15 ▶ 0o075 16 ~> set unix:umask = 0x43 17 put $unix:umask 18 ▶ 0o103 19 ~> set unix:umask = 0b001010100; put $unix:umask 20 ▶ 0o124 21 22 ## typed number ## 23 ~> set unix:umask = (num 0o123) 24 put $unix:umask 25 ▶ 0o123 26 // inexact integers are also supported 27 ~> set unix:umask = (num 9.0) 28 put $unix:umask 29 ▶ 0o011 30 31 /////////////////////////////// 32 # effect on external commands # 33 /////////////////////////////// 34 35 // The output of umask is unspecified in POSIX, but all Unix flavors Elvish 36 // supports write a 0 followed by an octal number. There is one inconsistency 37 // though: OpenBSD does not zero-pad the number (other than the leading 0), so a 38 // umask of 0o012 will appear as 012 on OpenBSD but 0012 on other platforms. 39 // Avoid this by using a umask that is 3 octal digits long. 40 ~> set unix:umask = 0123; sh -c umask 41 0123 42 43 /////////////////// 44 # temp assignment # 45 /////////////////// 46 47 ~> set unix:umask = 022 48 { tmp unix:umask = 011; put $unix:umask } 49 put $unix:umask 50 ▶ 0o011 51 ▶ 0o022 52 53 ////////////////// 54 ## parse errors ## 55 ////////////////// 56 57 ## not integer ## 58 ~> set unix:umask = (num 123.4) 59 Exception: bad value: umask must be integer in the range [0..0o777], but is 123.4 60 [tty]:1:5-14: set unix:umask = (num 123.4) 61 ~> set unix:umask = (num 1/2) 62 Exception: bad value: umask must be integer in the range [0..0o777], but is 1/2 63 [tty]:1:5-14: set unix:umask = (num 1/2) 64 65 ## not number ## 66 ~> set unix:umask = 022z 67 Exception: bad value: umask must be integer in the range [0..0o777], but is 022z 68 [tty]:1:5-14: set unix:umask = 022z 69 70 ## invalid type ## 71 ~> set unix:umask = [1] 72 Exception: bad value: umask must be integer in the range [0..0o777], but is list 73 [tty]:1:5-14: set unix:umask = [1] 74 75 ## out of range ## 76 ~> set unix:umask = 0o1000 77 Exception: out of range: umask must be from 0 to 0o777, but is 0o1000 78 [tty]:1:5-14: set unix:umask = 0o1000 79 ~> set unix:umask = -1 80 Exception: out of range: umask must be from 0 to 0o777, but is -0o1 81 [tty]:1:5-14: set unix:umask = -1 82 ~> set unix:umask = (num 100000000000000000000) 83 Exception: out of range: umask must be from 0 to 0o777, but is 100000000000000000000 84 [tty]:1:5-14: set unix:umask = (num 100000000000000000000)