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