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 #### popd returns error on empty directory stack
36 message=$(popd 2>&1)
37 echo $?
38 echo "$message" | grep -o "directory stack"
39 ## STDOUT:
40 1
41 directory stack
42 ## END
43
44 #### dirs builtin
45 cd /
46 dirs
47 ## status: 0
48 ## STDOUT:
49 /
50 ## END
51
52 #### dirs -c to clear the stack
53 set -o errexit
54 cd /
55 pushd /tmp >/dev/null # zsh pushd doesn't print anything, but bash does
56 echo --
57 dirs
58 dirs -c
59 echo --
60 dirs
61 ## status: 0
62 ## STDOUT:
63 --
64 /tmp /
65 --
66 /tmp
67 ## END
68
69 #### dirs -v to print numbered stack, one entry per line
70 set -o errexit
71 cd /
72 pushd /tmp >/dev/null
73 echo --
74 dirs -v
75 pushd /dev >/dev/null
76 echo --
77 dirs -v
78 ## status: 0
79 ## STDOUT:
80 --
81 0 /tmp
82 1 /
83 --
84 0 /dev
85 1 /tmp
86 2 /
87 ## END
88 #
89 # zsh uses tabs
90 ## OK zsh stdout-json: "--\n0\t/tmp\n1\t/\n--\n0\t/dev\n1\t/tmp\n2\t/\n"
91
92 #### dirs -p to print one entry per line
93 set -o errexit
94 cd /
95 pushd /tmp >/dev/null
96 echo --
97 dirs -p
98 pushd /dev >/dev/null
99 echo --
100 dirs -p
101 ## STDOUT:
102 --
103 /tmp
104 /
105 --
106 /dev
107 /tmp
108 /
109 ## END
110
111 #### dirs -l to print in long format, no tilde prefix
112 # Can't use the OSH test harness for this because
113 # /home/<username> may be included in a path.
114 cd /
115 HOME=/tmp
116 mkdir -p $HOME/oil_test
117 pushd $HOME/oil_test >/dev/null
118 dirs
119 dirs -l
120 ## status: 0
121 ## STDOUT:
122 ~/oil_test /
123 /tmp/oil_test /
124 ## END
125
126 #### dirs to print using tilde-prefix format
127 cd /
128 HOME=/tmp
129 mkdir -p $HOME/oil_test
130 pushd $HOME/oil_test >/dev/null
131 dirs
132 ## stdout: ~/oil_test /
133 ## status: 0
134
135 #### dirs test converting true home directory to tilde
136 cd /
137 HOME=/tmp
138 mkdir -p $HOME/oil_test/$HOME
139 pushd $HOME/oil_test/$HOME >/dev/null
140 dirs
141 ## stdout: ~/oil_test/tmp /
142 ## status: 0
143
144 #### dirs don't convert to tilde when $HOME is substring
145 cd /
146 mkdir -p /tmp/oil_test
147 mkdir -p /tmp/oil_tests
148 HOME=/tmp/oil_test
149 pushd /tmp/oil_tests
150 dirs
151
152 #### dirs tilde test when $HOME is exactly $PWD
153 cd /
154 mkdir -p /tmp/oil_test
155 HOME=/tmp/oil_test
156 pushd $HOME
157 dirs
158 ## status: 0
159 # zsh doesn't duplicate the stack I guess.
160 ## OK zsh stdout-json: "~ /\n"
161 ## STDOUT:
162 ~ /
163 ~ /
164 ## END
165
166 #### dirs test of path alias `..`
167 cd /tmp
168 pushd .. >/dev/null
169 dirs
170 ## stdout: / /tmp
171 ## status: 0
172
173 #### dirs test of path alias `.`
174 cd /tmp
175 pushd . >/dev/null
176 dirs
177 ## stdout: /tmp /tmp
178 ## status: 0