summaryrefslogtreecommitdiff
path: root/regress/bin/ksh/trap.t
blob: 35c982da6576aca5a51c3228bf2e891f3f49fd49 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
#	$OpenBSD: trap.t,v 1.5 2022/10/16 10:19:02 kn Exp $

#
# Check that I/O redirection failure triggers the ERR trap.
# stderr patterns are minimal to match all of bash, ksh and ksh93.
# Try writing the root directory to guarantee EISDIR.
#

name: failed-redirect-triggers-ERR-restricted
description:
	Check that restricted mode prevents valid redirections that may write.
arguments: !-r!
stdin:
	trap 'echo ERR' ERR
	true >/dev/null
expected-stdout:
	ERR
expected-stderr-pattern:
	/restricted/
expected-exit: e != 0
---


name: failed-redirect-triggers-ERR-command
description:
	Redirect standard output for a single command.
stdin:
	trap 'echo ERR' ERR
	true >/
expected-stdout:
	ERR
expected-stderr-pattern:
	/Is a directory/
expected-exit: e != 0
---


name: failed-redirect-triggers-ERR-permanent
description:
	Permanently redirect standard output of the shell without execution.
stdin:
	trap 'echo ERR' ERR
	exec >/
expected-stdout:
	ERR
expected-stderr-pattern:
	/Is a directory/
expected-exit: e != 0
---

#
# Check that the errexit option
# a) does not interfere with running traps and
# b) propagates a non-zero exit status from traps.
# Check that traps are run in the same order in which they were triggered.
#

name: failed-ERR-runs-EXIT
# XXX remove once bin/ksh/main.c r1.52 is backed out *AND* a new fix is in
# XXX enable once bin/ksh/main.c r1.52 is backed out
#expected-fail: yes
description:
	Check that EXIT runs under errexit even if ERR failed.
arguments: !-e!
stdin:
	trap 'echo ERR ; false' ERR
	trap 'echo EXIT' EXIT
	false
expected-stdout:
	ERR
	EXIT
expected-exit: e != 0
---


name: errexit-aborts-EXIT
# XXX remove once bin/ksh/main.c r1.52 is backed out
expected-fail: yes
description:
	Check that errexit makes EXIT exit early.
arguments: !-e!
stdin:
	trap 'echo ERR' ERR
	trap 'false ; echo EXIT' EXIT
expected-stdout:
	ERR
expected-exit: e != 0
---


name: EXIT-triggers-ERR
# XXX remove once bin/ksh/main.c r1.52 is backed out
expected-fail: yes
description:
	Check that ERR runs under errexit if EXIT failed.
arguments: !-e!
stdin:
	trap 'echo ERR' ERR
	trap 'echo EXIT ; false' EXIT
	true
expected-stdout:
	EXIT
	ERR
expected-exit: e != 0
---

#
# Check that the errexit option does not interfere with signal handler traps.
#

name: handled-signal-is-no-error
description:
	Check that gracefully handling a signal is not treated as error.
arguments: !-e!
stdin:
	trap 'echo ERR' ERR
	trap 'echo EXIT' EXIT
	trap 'echo USR1' USR1
	kill -USR1 $$
expected-stdout:
	USR1
	EXIT
expected-exit: e == 0
---