| 1 | ## oils_failures_allowed: 0
 | 
| 2 | ## compare_shells: bash zsh mksh dash ash
 | 
| 3 | 
 | 
| 4 | #### type -> keyword builtin 
 | 
| 5 | 
 | 
| 6 | type while cd
 | 
| 7 | 
 | 
| 8 | ## STDOUT:
 | 
| 9 | while is a shell keyword
 | 
| 10 | cd is a shell builtin
 | 
| 11 | ## END
 | 
| 12 | ## OK zsh/mksh STDOUT:
 | 
| 13 | while is a reserved word
 | 
| 14 | cd is a shell builtin
 | 
| 15 | ## END
 | 
| 16 | 
 | 
| 17 | #### type -> alias function external
 | 
| 18 | 
 | 
| 19 | shopt -s expand_aliases || true  # bash
 | 
| 20 | 
 | 
| 21 | alias ll='ls -l'
 | 
| 22 | 
 | 
| 23 | f() { echo hi; }
 | 
| 24 | 
 | 
| 25 | touch _tmp/date
 | 
| 26 | chmod +x _tmp/date
 | 
| 27 | PATH=_tmp:/bin
 | 
| 28 | 
 | 
| 29 | # ignore quotes and backticks
 | 
| 30 | # bash prints a left backtick
 | 
| 31 | quotes='"`'\'
 | 
| 32 | 
 | 
| 33 | type ll f date | sed "s/[$quotes]//g"
 | 
| 34 | 
 | 
| 35 | # Note: both procs and funcs go in var namespace?  So they don't respond to
 | 
| 36 | # 'type'?
 | 
| 37 | 
 | 
| 38 | ## STDOUT:
 | 
| 39 | ll is an alias for ls -l
 | 
| 40 | f is a shell function
 | 
| 41 | date is _tmp/date
 | 
| 42 | ## END
 | 
| 43 | ## OK ash STDOUT:
 | 
| 44 | ll is an alias for ls -l
 | 
| 45 | f is a function
 | 
| 46 | date is _tmp/date
 | 
| 47 | ## END
 | 
| 48 | ## OK mksh STDOUT:
 | 
| 49 | ll is an alias for ls -l
 | 
| 50 | f is a function
 | 
| 51 | date is a tracked alias for _tmp/date
 | 
| 52 | ## END
 | 
| 53 | ## OK bash STDOUT:
 | 
| 54 | ll is aliased to ls -l
 | 
| 55 | f is a function
 | 
| 56 | f () 
 | 
| 57 | { 
 | 
| 58 |     echo hi
 | 
| 59 | }
 | 
| 60 | date is _tmp/date
 | 
| 61 | ## END
 | 
| 62 | 
 | 
| 63 | #### type of relative path
 | 
| 64 | 
 | 
| 65 | touch _tmp/file _tmp/ex
 | 
| 66 | chmod +x _tmp/ex
 | 
| 67 | 
 | 
| 68 | type _tmp/file _tmp/ex
 | 
| 69 | 
 | 
| 70 | # dash and ash don't care if it's executable
 | 
| 71 | # mksh
 | 
| 72 | 
 | 
| 73 | ## status: 1
 | 
| 74 | ## STDOUT:
 | 
| 75 | _tmp/ex is _tmp/ex
 | 
| 76 | ## END
 | 
| 77 | 
 | 
| 78 | ## OK mksh/zsh STDOUT:
 | 
| 79 | _tmp/file not found
 | 
| 80 | _tmp/ex is _tmp/ex
 | 
| 81 | ## END
 | 
| 82 | 
 | 
| 83 | ## BUG dash/ash status: 0
 | 
| 84 | ## BUG dash/ash STDOUT:
 | 
| 85 | _tmp/file is _tmp/file
 | 
| 86 | _tmp/ex is _tmp/ex
 | 
| 87 | ## END
 | 
| 88 | 
 | 
| 89 | #### type -> not found
 | 
| 90 | 
 | 
| 91 | type zz 2>err.txt
 | 
| 92 | echo status=$?
 | 
| 93 | 
 | 
| 94 | # for bash and OSH: print to stderr
 | 
| 95 | fgrep -o 'zz: not found' err.txt || true
 | 
| 96 | 
 | 
| 97 | # zsh and mksh behave the same - status 1
 | 
| 98 | # dash and ash behave the same - status 127
 | 
| 99 | 
 | 
| 100 | ## STDOUT:
 | 
| 101 | status=1
 | 
| 102 | zz: not found
 | 
| 103 | ## END
 | 
| 104 | 
 | 
| 105 | ## OK mksh/zsh STDOUT:
 | 
| 106 | zz not found
 | 
| 107 | status=1
 | 
| 108 | ## END
 | 
| 109 | ## STDERR:
 | 
| 110 | ## END
 | 
| 111 | 
 | 
| 112 | ## BUG dash/ash STDOUT:
 | 
| 113 | zz: not found
 | 
| 114 | status=127
 | 
| 115 | ## END
 | 
| 116 | ## BUG dash/ash STDERR:
 | 
| 117 | ## END
 |