diff options
author | Denys Vlasenko <vda.linux@googlemail.com> | 2018-07-24 17:08:04 +0200 |
---|---|---|
committer | Denys Vlasenko <vda.linux@googlemail.com> | 2018-07-24 17:10:18 +0200 |
commit | 63c42afaa43d42def05dfbca1f4e10c7314b1f77 (patch) | |
tree | b88436d25560b74b7f626739c4ab14c12aff219a | |
parent | 41ef41b3e0a16c9f8524870a2dc4f768c237939e (diff) | |
download | busybox-w32-63c42afaa43d42def05dfbca1f4e10c7314b1f77.tar.gz busybox-w32-63c42afaa43d42def05dfbca1f4e10c7314b1f77.tar.bz2 busybox-w32-63c42afaa43d42def05dfbca1f4e10c7314b1f77.zip |
hush: add "heredoc.tests" from ash, tweak ash "is a function" message
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
-rw-r--r-- | shell/ash.c | 3 | ||||
-rw-r--r-- | shell/ash_test/ash-heredoc/heredoc.right | 2 | ||||
-rw-r--r-- | shell/hush_test/hush-heredoc/heredoc.right | 20 | ||||
-rwxr-xr-x | shell/hush_test/hush-heredoc/heredoc.tests | 97 |
4 files changed, 120 insertions, 2 deletions
diff --git a/shell/ash.c b/shell/ash.c index 051cc671f..03fbbee53 100644 --- a/shell/ash.c +++ b/shell/ash.c | |||
@@ -8512,7 +8512,8 @@ describe_command(char *command, const char *path, int describe_command_verbose) | |||
8512 | 8512 | ||
8513 | case CMDFUNCTION: | 8513 | case CMDFUNCTION: |
8514 | if (describe_command_verbose) { | 8514 | if (describe_command_verbose) { |
8515 | out1str(" is a shell function"); | 8515 | /*out1str(" is a shell function");*/ |
8516 | out1str(" is a function"); /* bash says this */ | ||
8516 | } else { | 8517 | } else { |
8517 | out1str(command); | 8518 | out1str(command); |
8518 | } | 8519 | } |
diff --git a/shell/ash_test/ash-heredoc/heredoc.right b/shell/ash_test/ash-heredoc/heredoc.right index baf115166..85d36dae9 100644 --- a/shell/ash_test/ash-heredoc/heredoc.right +++ b/shell/ash_test/ash-heredoc/heredoc.right | |||
@@ -16,6 +16,6 @@ tab 3 | |||
16 | abc | 16 | abc |
17 | def ghi | 17 | def ghi |
18 | jkl mno | 18 | jkl mno |
19 | fff is a shell function | 19 | fff is a function |
20 | hi | 20 | hi |
21 | there | 21 | there |
diff --git a/shell/hush_test/hush-heredoc/heredoc.right b/shell/hush_test/hush-heredoc/heredoc.right new file mode 100644 index 000000000..9b9e2aae9 --- /dev/null +++ b/shell/hush_test/hush-heredoc/heredoc.right | |||
@@ -0,0 +1,20 @@ | |||
1 | there | ||
2 | one - alpha | ||
3 | two - beta | ||
4 | three - gamma | ||
5 | hi\ | ||
6 | there$a | ||
7 | stuff | ||
8 | hi\ | ||
9 | there | ||
10 | EO\ | ||
11 | F | ||
12 | hi | ||
13 | hi | ||
14 | tab 1 | ||
15 | tab 2 | ||
16 | tab 3 | ||
17 | abc | ||
18 | def ghi | ||
19 | jkl mno | ||
20 | fff is a function | ||
diff --git a/shell/hush_test/hush-heredoc/heredoc.tests b/shell/hush_test/hush-heredoc/heredoc.tests new file mode 100755 index 000000000..39345c51b --- /dev/null +++ b/shell/hush_test/hush-heredoc/heredoc.tests | |||
@@ -0,0 +1,97 @@ | |||
1 | # check order and content of multiple here docs | ||
2 | |||
3 | cat << EOF1 << EOF2 | ||
4 | hi | ||
5 | EOF1 | ||
6 | there | ||
7 | EOF2 | ||
8 | |||
9 | while read line1; do | ||
10 | read line2 <&3 | ||
11 | echo $line1 - $line2 | ||
12 | done <<EOF1 3<<EOF2 | ||
13 | one | ||
14 | two | ||
15 | three | ||
16 | EOF1 | ||
17 | alpha | ||
18 | beta | ||
19 | gamma | ||
20 | EOF2 | ||
21 | |||
22 | |||
23 | # check quoted here-doc is protected | ||
24 | |||
25 | a=foo | ||
26 | cat << 'EOF' | ||
27 | hi\ | ||
28 | there$a | ||
29 | stuff | ||
30 | EOF | ||
31 | |||
32 | # check that quoted here-documents don't have \newline processing done | ||
33 | |||
34 | cat << 'EOF' | ||
35 | hi\ | ||
36 | there | ||
37 | EO\ | ||
38 | F | ||
39 | EOF | ||
40 | true | ||
41 | |||
42 | # check that \newline is removed at start of here-doc | ||
43 | cat << EO\ | ||
44 | F | ||
45 | hi | ||
46 | EOF | ||
47 | |||
48 | # check that \newline removal works for here-doc delimiter | ||
49 | cat << EOF | ||
50 | hi | ||
51 | EO\ | ||
52 | F | ||
53 | |||
54 | # check operation of tab removal in here documents | ||
55 | cat <<- EOF | ||
56 | tab 1 | ||
57 | tab 2 | ||
58 | tab 3 | ||
59 | EOF | ||
60 | |||
61 | # check appending of text to file from here document | ||
62 | rm -f /tmp/bash-zzz | ||
63 | cat > /tmp/bash-zzz << EOF | ||
64 | abc | ||
65 | EOF | ||
66 | cat >> /tmp/bash-zzz << EOF | ||
67 | def ghi | ||
68 | jkl mno | ||
69 | EOF | ||
70 | cat /tmp/bash-zzz | ||
71 | rm -f /tmp/bash-zzz | ||
72 | |||
73 | # make sure command printing puts the here-document as the last redirection | ||
74 | # on the line, and the function export code preserves syntactic correctness | ||
75 | fff() | ||
76 | { | ||
77 | ed /tmp/foo <<ENDOFINPUT >/dev/null | ||
78 | /^name/d | ||
79 | w | ||
80 | q | ||
81 | ENDOFINPUT | ||
82 | aa=1 | ||
83 | } | ||
84 | |||
85 | type fff | ||
86 | #ash# export -f fff | ||
87 | #ash# ${THIS_SH} -c 'type fff' | ||
88 | |||
89 | #hush# bash warns: "here-document at line N delimited by end-of-file", | ||
90 | #hush# ash allows it, | ||
91 | #hush# hush errors out for now: | ||
92 | #hush# # check that end of file delimits a here-document | ||
93 | #hush# # THIS MUST BE LAST! | ||
94 | #hush# | ||
95 | #hush# cat << EOF | ||
96 | #hush# hi | ||
97 | #hush# there | ||