1 #!/bin/bash
2
3 #### pushd/popd
4 set -o errexit
5 cd /
6 pushd /tmp
7 echo -n pwd=; pwd
8 popd
9 echo -n pwd=; pwd
10 ## status: 0
11 ## STDOUT:
12 /tmp /
13 pwd=/tmp
14 /
15 pwd=/
16 ## END
17 ## OK zsh STDOUT:
18 pwd=/tmp
19 pwd=/
20 ## END
21 ## N-I dash/mksh status: 127
22 ## N-I dash/mksh stdout-json: ""
23
24 #### popd usage error
25 pushd / >/dev/null
26 popd zzz
27 echo status=$?
28 ## STDOUT:
29 status=2
30 ## END
31 ## BUG zsh STDOUT:
32 status=0
33 ## END
34
35
36 #### dirs builtin
37 cd /
38 dirs
39 ## status: 0
40 ## STDOUT:
41 /
42 ## END
43
44 #### dirs -c to clear the stack
45 set -o errexit
46 cd /
47 pushd /tmp >/dev/null # zsh pushd doesn't print anything, but bash does
48 echo --
49 dirs
50 dirs -c
51 echo --
52 dirs
53 ## status: 0
54 ## STDOUT:
55 --
56 /tmp /
57 --
58 /tmp
59 ## END
60
61 #### dirs -v to print numbered stack, one entry per line
62 set -o errexit
63 cd /
64 pushd /tmp >/dev/null
65 echo --
66 dirs -v
67 pushd /lib >/dev/null
68 echo --
69 dirs -v
70 ## status: 0
71 ## STDOUT:
72 --
73 0 /tmp
74 1 /
75 --
76 0 /lib
77 1 /tmp
78 2 /
79 ## END
80 #
81 # zsh uses tabs
82 ## OK zsh stdout-json: "--\n0\t/tmp\n1\t/\n--\n0\t/lib\n1\t/tmp\n2\t/\n"
83
84 #### dirs -p to print one entry per line
85 set -o errexit
86 cd /
87 pushd /tmp >/dev/null
88 echo --
89 dirs -p
90 pushd /lib >/dev/null
91 echo --
92 dirs -p
93 ## STDOUT:
94 --
95 /tmp
96 /
97 --
98 /lib
99 /tmp
100 /
101 ## END
102
103 #### dirs -l to print in long format, no tilde prefix
104 # Can't use the OSH test harness for this because
105 # /home/<username> may be included in a path.
106 cd /
107 HOME=/tmp
108 mkdir -p $HOME/oil_test
109 pushd $HOME/oil_test >/dev/null
110 dirs
111 dirs -l
112 ## status: 0
113 ## STDOUT:
114 ~/oil_test /
115 /tmp/oil_test /
116 ## END
117
118 #### dirs to print using tilde-prefix format
119 cd /
120 HOME=/tmp
121 mkdir -p $HOME/oil_test
122 pushd $HOME/oil_test >/dev/null
123 dirs
124 ## stdout: ~/oil_test /
125 ## status: 0
126
127 #### dirs test converting true home directory to tilde
128 cd /
129 HOME=/tmp
130 mkdir -p $HOME/oil_test/$HOME
131 pushd $HOME/oil_test/$HOME >/dev/null
132 dirs
133 ## stdout: ~/oil_test/tmp /
134 ## status: 0
135
136 #### dirs don't convert to tilde when $HOME is substring
137 cd /
138 mkdir -p /tmp/oil_test
139 mkdir -p /tmp/oil_tests
140 HOME=/tmp/oil_test
141 pushd /tmp/oil_tests
142 dirs
143
144 #### dirs tilde test when $HOME is exactly $PWD
145 cd /
146 mkdir -p /tmp/oil_test
147 HOME=/tmp/oil_test
148 pushd $HOME
149 dirs
150 ## status: 0
151 # zsh doesn't duplicate the stack I guess.
152 ## OK zsh stdout-json: "~ /\n"
153 ## STDOUT:
154 ~ /
155 ~ /
156 ## END
157
158 #### dirs test of path alias `..`
159 cd /tmp
160 pushd .. >/dev/null
161 dirs
162 ## stdout: / /tmp
163 ## status: 0
164
165 #### dirs test of path alias `.`
166 cd /tmp
167 pushd . >/dev/null
168 dirs
169 ## stdout: /tmp /tmp
170 ## status: 0