shell/ash_test/ash-heredoc/heredoc_huge.right+3 -0
| @@ -0,0 +1,3 @@ |
| + | 546ed3f5c81c780d3ab86ada14824237 - |
| + | 546ed3f5c81c780d3ab86ada14824237 - |
| + | End |
shell/ash_test/ash-heredoc/heredoc_huge.tests+9 -0
| @@ -0,0 +1,9 @@ |
| + | # This creates 120k heredoc |
| + | echo 'cat <<HERE | md5sum' >"$0.tmp" |
| + | yes "123456789 123456789 123456789 123456789" | head -3000 >>"$0.tmp" |
| + | echo 'HERE' >>"$0.tmp" |
| + | |
| + | yes "123456789 123456789 123456789 123456789" | head -3000 | md5sum |
| + | . "$0.tmp" |
| + | rm "$0.tmp" |
| + | echo End |
shell/ash_test/ash-misc/and-or.right+18 -0
| @@ -0,0 +1,18 @@ |
| + | a1 |
| + | a4 |
| + | b1 |
| + | b3 |
| + | b4 |
| + | b6 |
| + | c4 |
| + | c5 |
| + | c7 |
| + | c8 |
| + | ff1 |
| + | ff3 |
| + | ft2 |
| + | ft3 |
| + | tf2 |
| + | tf3 |
| + | tt2 |
| + | tt4 |
shell/ash_test/ash-misc/and-or.tests+34 -0
| @@ -0,0 +1,34 @@ |
| + | false || echo a1 |
| + | false && echo a2 |
| + | true || echo a3 |
| + | true && echo a4 |
| + | |
| + | false || echo b1 || echo b2 |
| + | false || echo b3 && echo b4 |
| + | false && echo b5 || echo b6 |
| + | false && echo b7 && echo b8 |
| + | |
| + | true || echo c1 || echo c2 |
| + | true || echo c3 && echo c4 |
| + | true && echo c5 || echo c6 |
| + | true && echo c7 && echo c8 |
| + | |
| + | false || false || echo ff1 |
| + | false || false && echo ff2 |
| + | false && false || echo ff3 |
| + | false && false && echo ff4 |
| + | |
| + | false || true || echo ft1 |
| + | false || true && echo ft2 |
| + | false && true || echo ft3 |
| + | false && true && echo ft4 |
| + | |
| + | true || false || echo tf1 |
| + | true || false && echo tf2 |
| + | true && false || echo tf3 |
| + | true && false && echo tf4 |
| + | |
| + | true || true || echo tt1 |
| + | true || true && echo tt2 |
| + | true && true || echo tt3 |
| + | true && true && echo tt4 |
shell/ash_test/ash-misc/assignment1.right+9 -0
| @@ -0,0 +1,9 @@ |
| + | if1:0 |
| + | while1:0 |
| + | until1:0 |
| + | if2:0 |
| + | while2:0 |
| + | until2:0 |
| + | if3:0 |
| + | while3:0 |
| + | until3:0 |
shell/ash_test/ash-misc/assignment1.tests+42 -0
| @@ -0,0 +1,42 @@ |
| + | # Assignments after some keywords should still work |
| + | |
| + | if a=1 true; then a=1 true; elif a=1 true; then a=1 true; else a=1 true; fi |
| + | echo if1:$? |
| + | while a=1 true; do a=1 true; break; done |
| + | echo while1:$? |
| + | until a=1 false; do a=1 true; break; done |
| + | echo until1:$? |
| + | |
| + | if a=1 true |
| + | then a=1 true |
| + | elif a=1 true |
| + | then a=1 true |
| + | else a=1 true |
| + | fi |
| + | echo if2:$? |
| + | while a=1 true |
| + | do a=1 true |
| + | break |
| + | done |
| + | echo while2:$? |
| + | until a=1 false |
| + | do a=1 true |
| + | break |
| + | done |
| + | echo until2:$? |
| + | |
| + | if |
| + | a=1 true; then |
| + | a=1 true; elif |
| + | a=1 true; then |
| + | a=1 true; else |
| + | a=1 true; fi |
| + | echo if3:$? |
| + | while |
| + | a=1 true; do |
| + | a=1 true; break; done |
| + | echo while3:$? |
| + | until |
| + | a=1 false; do |
| + | a=1 true; break; done |
| + | echo until3:$? |
shell/ash_test/ash-misc/assignment3.right+2 -0
| @@ -0,0 +1,2 @@ |
| + | Done:0 |
| + | abc=123 |
shell/ash_test/ash-misc/assignment3.tests+5 -0
| @@ -0,0 +1,5 @@ |
| + | # This must be interpreted as assignments |
| + | a=1 b\ |
| + | =2 c=3 |
| + | echo Done:$? |
| + | echo abc=$a$b$c |
shell/ash_test/ash-misc/assignment4.right+1 -0
shell/ash_test/ash-misc/assignment4.tests+3 -0
| @@ -0,0 +1,3 @@ |
| + | # There was a bug where we misinterpreted assignments after 'do': |
| + | for i in 1; do eval b=; done |
| + | echo Done:$? |
shell/ash_test/ash-misc/break1.right+2 -0
shell/ash_test/ash-misc/break1.tests+2 -0
| @@ -0,0 +1,2 @@ |
| + | while true; do echo A; break; echo B; done |
| + | echo OK:$? |
shell/ash_test/ash-misc/break2.right+3 -0
| @@ -0,0 +1,3 @@ |
| + | A |
| + | AA |
| + | OK:0 |
shell/ash_test/ash-misc/break2.tests+6 -0
| @@ -0,0 +1,6 @@ |
| + | while true; do |
| + | echo A |
| + | while true; do echo AA; break 2; echo BB; done |
| + | echo B |
| + | done |
| + | echo OK:$? |
shell/ash_test/ash-misc/break3.right+2 -0
shell/ash_test/ash-misc/break3.tests+2 -0
| @@ -0,0 +1,2 @@ |
| + | v=break; while true; do echo A; $v; echo B; break; echo C; done |
| + | echo OK:$? |
shell/ash_test/ash-misc/break4.right+6 -0
| @@ -0,0 +1,6 @@ |
| + | A |
| + | AA |
| + | TRUE |
| + | A |
| + | AA |
| + | OK:0 |
shell/ash_test/ash-misc/break4.tests+12 -0
| @@ -0,0 +1,12 @@ |
| + | cond=true |
| + | while $cond; do |
| + | echo A |
| + | if test "$cond" = true; then |
| + | cond='echo TRUE' |
| + | else |
| + | cond=false |
| + | fi |
| + | while true; do echo AA; continue 2; echo BB; done |
| + | echo B |
| + | done |
| + | echo OK:$? |
shell/ash_test/ash-misc/break5.right+13 -0
| @@ -0,0 +1,13 @@ |
| + | A |
| + | B |
| + | 0 |
| + | A:a |
| + | B |
| + | D |
| + | A:b |
| + | B |
| + | D |
| + | A:c |
| + | B |
| + | D |
| + | 0 |
shell/ash_test/ash-misc/break5.tests+4 -0
| @@ -0,0 +1,4 @@ |
| + | while true; do echo A; { echo B; break; echo C; }; echo D; done |
| + | echo $? |
| + | for v in a b c; do echo A:$v; (echo B; break; echo C); echo D; done |
| + | echo $? |
shell/ash_test/ash-misc/builtin1.right+2 -0
| @@ -0,0 +1,2 @@ |
| + | VARIABLE=export |
| + | OK:0 |
shell/ash_test/ash-misc/builtin1.tests+6 -0
| @@ -0,0 +1,6 @@ |
| + | # builtins, unlike keywords like "while", can be constructed |
| + | # with substitutions |
| + | VARIABLE=export |
| + | $VARIABLE VARIABLE |
| + | env | grep ^VARIABLE |
| + | echo OK:$? |
shell/ash_test/ash-misc/case1.right+22 -0
| @@ -0,0 +1,22 @@ |
| + | OK_1 |
| + | OK_1 |
| + | OK_21 |
| + | OK_22 |
| + | OK_23 |
| + | OK_31 |
| + | OK_32 |
| + | OK_41 |
| + | OK_42 |
| + | OK_43 |
| + | OK_44 |
| + | OK_51 |
| + | OK_52 |
| + | OK_53 |
| + | OK_sub1 |
| + | OK_sub2 |
| + | OK_sub3 |
| + | OK_sub4 |
| + | OK_sub5 |
| + | OK_sub6 |
| + | OK_esac1 |
| + | Done |
shell/ash_test/ash-misc/case1.tests+40 -0
| @@ -0,0 +1,40 @@ |
| + | case w in a) echo SKIP;; w) echo OK_1;; w) echo WRONG;; esac |
| + | |
| + | case w in |
| + | a) echo SKIP;; |
| + | w)echo OK_1 ;; |
| + | w) |
| + | echo WRONG |
| + | ;; |
| + | esac |
| + | |
| + | t=w |
| + | case $t in a) echo SKIP;; w) echo OK_21;; w) echo WRONG;; esac; |
| + | case "$t" in a) echo SKIP;; w) echo OK_22;; w) echo WRONG;; esac; |
| + | case w in a) echo SKIP;; $t) echo OK_23;; "$t") echo WRONG;; esac; |
| + | |
| + | case '' in a) echo SKIP;; w) echo WRONG;; *) echo OK_31;; esac; |
| + | case '' in a) echo SKIP;; '') echo OK_32;; *) echo WRONG;; esac; |
| + | |
| + | case `echo w` in a) echo SKIP;; w) echo OK_41;; w) echo WRONG;; esac; |
| + | case "`echo w`" in a) echo SKIP;; w) echo OK_42;; w) echo WRONG;; esac; |
| + | case `echo w w` in a) echo SKIP;; w) echo WRONG;; 'w w') echo OK_43;; esac; |
| + | case `echo w w` in a) echo SKIP;; w) echo WRONG;; w*) echo OK_44;; esac; |
| + | |
| + | case w in `echo w`) echo OK_51;; `echo WRONG >&2`w) echo WRONG;; esac; |
| + | case w in `echo OK_52 >&2`) echo SKIP;; `echo`w) echo OK_53;; esac; |
| + | |
| + | # parsing cases in subshells can easily get messy |
| + | case m in m) echo OK_sub1;; esac |
| + | case m in (m) echo OK_sub2;; esac |
| + | (case m in m) echo OK_sub3;; esac) |
| + | (case m in (m) echo OK_sub4;; esac) |
| + | ( |
| + | case m in m) echo OK_sub5;; esac |
| + | ) |
| + | ( |
| + | case m in (m) echo OK_sub6;; esac |
| + | ) |
| + | (case esac in "esac") echo OK_esac1;; esac) |
| + | |
| + | echo Done |
shell/ash_test/ash-misc/colon.right+2 -0
shell/ash_test/ash-misc/colon.tests+5 -0
| @@ -0,0 +1,5 @@ |
| + | false |
| + | : |
| + | echo $? |
| + | (while :; do exit; done) |
| + | echo OK: $? |
shell/ash_test/ash-misc/compound.right+14 -0
| @@ -0,0 +1,14 @@ |
| + | new group |
| + | 0 |
| + | 1 |
| + | 2 |
| + | 3 |
| + | 4 |
| + | 5 |
| + | 6 |
| + | new group |
| + | new group |
| + | 0 |
| + | 1 |
| + | 2 |
| + | 3 |
shell/ash_test/ash-misc/compound.tests+21 -0
| @@ -0,0 +1,21 @@ |
| + | echo new group |
| + | echo 0; { :; } |
| + | echo 1; { : ;} |
| + | echo 2; ({ :; }) |
| + | echo 3; ({ : ;}) |
| + | echo 4; ( : ) |
| + | echo 5; ( :; ) |
| + | echo 6; ( : ;) |
| + | # not sure if POSIX requires these, but bash accepts them ... |
| + | #echo 7; {( : )} |
| + | #echo 8; {( :; )} |
| + | #echo 9; {( : ;)} |
| + | |
| + | echo new group |
| + | #echo 0; {(:);} |
| + | |
| + | echo new group |
| + | echo 0; (:) |
| + | echo 1; (:;) |
| + | echo 2; (:); |
| + | echo 3; (:;); |
shell/ash_test/ash-misc/continue1.right+8 -0
| @@ -0,0 +1,8 @@ |
| + | A:a |
| + | A:b |
| + | A:c |
| + | OK1 |
| + | A:a |
| + | A:b |
| + | A:c |
| + | OK2 |
shell/ash_test/ash-misc/continue1.tests+4 -0
| @@ -0,0 +1,4 @@ |
| + | for v in a b c; do echo A:$v; continue 666; done |
| + | echo OK1 |
| + | for v in a b c; do echo A:$v; continue 666; done |
| + | echo OK2 |
shell/ash_test/ash-misc/continue2.right+1 -0
shell/ash_test/ash-misc/continue2.tests+3 -0
| @@ -0,0 +1,3 @@ |
| + | e='' |
| + | (while test $e && exit 1; true; do e=1; continue; done) |
| + | echo Ok:$? |
shell/ash_test/ash-misc/continue3.right+2 -0
shell/ash_test/ash-misc/continue3.tests+3 -0
| @@ -0,0 +1,3 @@ |
| + | # Test that "continue" does affect exitcode (sets to 0) |
| + | e='' |
| + | while echo $?; test $e && exit; true; do e=1; false; continue; done |
shell/ash_test/ash-misc/empty_for.right+1 -0
shell/ash_test/ash-misc/empty_for.tests+3 -0
| @@ -0,0 +1,3 @@ |
| + | false |
| + | for a in; do echo "HELLO"; done |
| + | echo OK: $? |
shell/ash_test/ash-misc/empty_for2.right+4 -0
| @@ -0,0 +1,4 @@ |
| + | PARAM:abc |
| + | PARAM:d e |
| + | PARAM:123 |
| + | OK: 0 |
shell/ash_test/ash-misc/empty_for2.tests+6 -0
| @@ -0,0 +1,6 @@ |
| + | if test $# = 0; then |
| + | exec "$THIS_SH" $0 abc "d e" 123 |
| + | fi |
| + | false |
| + | for v; do echo "PARAM:$v"; done |
| + | echo OK: $? |
shell/ash_test/ash-misc/exit1.right+1 -0
shell/ash_test/ash-misc/exit1.tests+4 -0
| @@ -0,0 +1,4 @@ |
| + | trap "echo Not shown" EXIT |
| + | (exit) # must be silent |
| + | trap "echo Once; exit" EXIT |
| + | { exit; } |
shell/ash_test/ash-misc/for_with_bslashes.right+8 -0
| @@ -0,0 +1,8 @@ |
| + | a |
| + | b\c |
| + | b\\c |
| + | b"c |
| + | b'c |
| + | b$c |
| + | b`true`c |
| + | Zero:0 |
shell/ash_test/ash-misc/for_with_bslashes.tests+10 -0
| @@ -0,0 +1,10 @@ |
| + | # UNFIXED BUG. |
| + | # commented-out words contain ^C character. |
| + | # It's a SPECIAL_VAR_SYMBOL, for now hush does not escape it. |
| + | # When it is fixed, update this test. |
| + | |
| + | for a in 'a' 'b\c' 'b\\c' 'b"c' "b'c" 'b$c' 'b`true`c' ### 'b#c' |
| + | do |
| + | echo $a |
| + | done |
| + | echo Zero:$? |
shell/ash_test/ash-misc/for_with_keywords.right+4 -0
| @@ -0,0 +1,4 @@ |
| + | do |
| + | done |
| + | then |
| + | OK: 0 |
shell/ash_test/ash-misc/for_with_keywords.tests+2 -0
| @@ -0,0 +1,2 @@ |
| + | for if in do done then; do echo $if; done |
| + | echo OK: $? |
shell/ash_test/ash-misc/if_false_exitcode.right+1 -0
shell/ash_test/ash-misc/if_false_exitcode.tests+2 -0
| @@ -0,0 +1,2 @@ |
| + | if false; then echo Bad; fi |
| + | echo Ok:$? |
shell/ash_test/ash-misc/nommu1.right+7 -0
| @@ -0,0 +1,7 @@ |
| + | Ok |
| + | Ok |
| + | Ok |
| + | Ok |
| + | Ok |
| + | Ok |
| + | Done |
shell/ash_test/ash-misc/nommu1.tests+12 -0
| @@ -0,0 +1,12 @@ |
| + | (echo \ |
| + | Ok) |
| + | ( (echo \ |
| + | Ok) ) |
| + | ( ( (echo \ |
| + | Ok) ) ) |
| + | |
| + | (echo \Ok) |
| + | ( (echo \Ok) ) |
| + | ( ( (echo \Ok) ) ) |
| + | |
| + | echo Done |
shell/ash_test/ash-misc/nommu2.right+5 -0
| @@ -0,0 +1,5 @@ |
| + | Ok |
| + | Ok |
| + | Ok |
| + | Ok |
| + | Done |
shell/ash_test/ash-misc/nommu2.tests+5 -0
| @@ -0,0 +1,5 @@ |
| + | echo Not shown | if true; then echo $(echo Ok); fi |
| + | echo Not shown | if true; then echo `echo Ok`; fi |
| + | echo Not shown | ( if true; then echo $(echo Ok); fi ) |
| + | echo Not shown | ( if true; then echo `echo Ok`; fi ) |
| + | echo Done |
shell/ash_test/ash-misc/nommu3.right+2 -0
shell/ash_test/ash-misc/nommu3.tests+15 -0
| @@ -0,0 +1,15 @@ |
| + | #!/bin/sh |
| + | |
| + | func() |
| + | { |
| + | while read p; do echo "$p"; done |
| + | } |
| + | |
| + | pipe_to_func() |
| + | { |
| + | # We had a NOMMU bug which caused "echo Ok |" part to be lost |
| + | echo Ok | func |
| + | } |
| + | |
| + | pipe_to_func | cat |
| + | echo $? |
shell/ash_test/ash-misc/opts1.right+2 -0
| @@ -0,0 +1,2 @@ |
| + | Param1: >-10qwertyuiop< |
| + | Done |
shell/ash_test/ash-misc/opts1.tests+5 -0
| @@ -0,0 +1,5 @@ |
| + | if test $# = 0; then |
| + | exec "$THIS_SH" $0 -10qwertyuiop |
| + | fi |
| + | echo "Param1: >$1<" |
| + | echo Done |
shell/ash_test/ash-misc/pid.right+1 -0
shell/ash_test/ash-misc/pid.tests+1 -0
| @@ -0,0 +1 @@ |
| + | test `(echo $$)` = `echo $$`; echo $? |
shell/ash_test/ash-misc/pipefail.right+40 -0
| @@ -0,0 +1,40 @@ |
| + | Default: |
| + | true | true: |
| + | 0 |
| + | 1 |
| + | true | false: |
| + | 1 |
| + | 0 |
| + | false | true: |
| + | 0 |
| + | 1 |
| + | exit 2 | exit 3 | exit 4: |
| + | 4 |
| + | 0 |
| + | Pipefail on: |
| + | true | true: |
| + | 0 |
| + | 1 |
| + | true | false: |
| + | 1 |
| + | 0 |
| + | false | true: |
| + | 1 |
| + | 0 |
| + | exit 2 | exit 3 | exit 4: |
| + | 4 |
| + | 0 |
| + | Pipefail off: |
| + | true | true: |
| + | 0 |
| + | 1 |
| + | true | false: |
| + | 1 |
| + | 0 |
| + | false | true: |
| + | 0 |
| + | 1 |
| + | exit 2 | exit 3 | exit 4: |
| + | 4 |
| + | 0 |
| + | Done |
shell/ash_test/ash-misc/pipefail.tests+45 -0
| @@ -0,0 +1,45 @@ |
| + | echo Default: |
| + | echo "true | true:" |
| + | true | true; echo $? |
| + | ! true | true; echo $? |
| + | echo "true | false:" |
| + | true | false; echo $? |
| + | ! true | false; echo $? |
| + | echo "false | true:" |
| + | false | true; echo $? |
| + | ! false | true; echo $? |
| + | echo "exit 2 | exit 3 | exit 4:" |
| + | exit 2 | exit 3 | exit 4; echo $? |
| + | ! exit 2 | exit 3 | exit 4; echo $? |
| + | |
| + | echo Pipefail on: |
| + | set -o pipefail |
| + | echo "true | true:" |
| + | true | true; echo $? |
| + | ! true | true; echo $? |
| + | echo "true | false:" |
| + | true | false; echo $? |
| + | ! true | false; echo $? |
| + | echo "false | true:" |
| + | false | true; echo $? |
| + | ! false | true; echo $? |
| + | echo "exit 2 | exit 3 | exit 4:" |
| + | exit 2 | exit 3 | exit 4; echo $? |
| + | ! exit 2 | exit 3 | exit 4; echo $? |
| + | |
| + | echo Pipefail off: |
| + | set +o pipefail |
| + | echo "true | true:" |
| + | true | true; echo $? |
| + | ! true | true; echo $? |
| + | echo "true | false:" |
| + | true | false; echo $? |
| + | ! true | false; echo $? |
| + | echo "false | true:" |
| + | false | true; echo $? |
| + | ! false | true; echo $? |
| + | echo "exit 2 | exit 3 | exit 4:" |
| + | exit 2 | exit 3 | exit 4; echo $? |
| + | ! exit 2 | exit 3 | exit 4; echo $? |
| + | |
| + | echo Done |
shell/ash_test/ash-misc/read.right+4 -0
| @@ -0,0 +1,4 @@ |
| + | read |
| + | cat |
| + | echo "REPLY=$REPLY" |
| + | REPLY=exec <read.tests |
shell/ash_test/ash-misc/read.tests+4 -0
| @@ -0,0 +1,4 @@ |
| + | exec <read.tests |
| + | read |
| + | cat |
| + | echo "REPLY=$REPLY" |
shell/ash_test/ash-misc/return1.right+1 -0
shell/ash_test/ash-misc/return1.tests+4 -0
| @@ -0,0 +1,4 @@ |
| + | echo "true && return; echo Should not be printed" >return_sourced |
| + | . ./return_sourced |
| + | rm return_sourced |
| + | echo Ok:$? |
shell/ash_test/ash-misc/shift.right+6 -0
| @@ -0,0 +1,6 @@ |
| + | ./shift.tests abc d e |
| + | ./shift.tests d e 123 |
| + | ./shift.tests d e 123 |
| + | ./shift.tests |
| + | ./shift.tests |
| + | ./shift.tests |
shell/ash_test/ash-misc/shift.tests+14 -0
| @@ -0,0 +1,14 @@ |
| + | if test $# = 0; then |
| + | exec "$THIS_SH" $0 abc "d e" 123 |
| + | fi |
| + | echo $0 $1 $2 |
| + | shift |
| + | echo $0 $1 $2 |
| + | shift 999 |
| + | echo $0 $1 $2 |
| + | shift 2 |
| + | echo $0 $1 $2 |
| + | shift 2 |
| + | echo $0 $1 $2 |
| + | shift |
| + | echo $0 $1 $2 |
shell/ash_test/ash-misc/sigint1.right+1 -0
| @@ -0,0 +1 @@ |
| + | Sending SIGINT to main shell PID |
shell/ash_test/ash-misc/sigint1.tests+41 -0
| @@ -0,0 +1,41 @@ |
| + | # What should happen if non-interactive shell gets SIGINT? |
| + | |
| + | (sleep 1; echo Sending SIGINT to main shell PID; exec kill -INT $$) & |
| + | |
| + | # We create a child which exits with 0 even on SIGINT |
| + | # (The complex command is necessary only if SIGINT is generated by ^C, |
| + | # in this testcase even bare "sleep 2" would do because |
| + | # in the testcase we don't send SIGINT *to the child*...) |
| + | $THIS_SH -c 'trap "exit 0" SIGINT; sleep 2' |
| + | |
| + | # In one second, we (main shell) get SIGINT here. |
| + | # The question is whether we should, or should not, exit. |
| + | |
| + | # bash will not stop here. It will execute next command(s). |
| + | |
| + | # The rationale for this is described here: |
| + | # http://www.cons.org/cracauer/sigint.html |
| + | # |
| + | # Basically, bash will not exit on SIGINT immediately if it waits |
| + | # for a child. It will wait for the child to exit. |
| + | # If child exits NOT by dying on SIGINT, then bash will not exit. |
| + | # |
| + | # The idea is that the following script: |
| + | # | emacs file.txt |
| + | # | more cmds |
| + | # User may use ^C to interrupt editor's ops like search. But then |
| + | # emacs exits normally. User expects that script doesn't stop. |
| + | # |
| + | # This is a nice idea, but detecting "did process really exit |
| + | # with SIGINT?" is racy. Consider: |
| + | # | bash -c 'while true; do /bin/true; done' |
| + | # When ^C is pressed while bash waits for /bin/true to exit, |
| + | # it may happen that /bin/true exits with exitcode 0 before |
| + | # ^C is delivered to it as SIGINT. bash will see SIGINT, then |
| + | # it will see that child exited with 0, and bash will NOT EXIT. |
| + | |
| + | # Therefore we do not implement bash behavior. |
| + | # I'd say that emacs need to put itself into a separate pgrp |
| + | # to isolate shell from getting stray SIGINTs from ^C. |
| + | |
| + | echo Next command after SIGINT was executed |
shell/ash_test/ash-misc/unicode1.right+3 -0
shell/ash_test/ash-misc/unicode1.tests+13 -0
| @@ -0,0 +1,13 @@ |
| + | LANG=en_US.UTF-8 |
| + | |
| + | # A combining character U+300 |
| + | a=`printf "\xcc\x80"` |
| + | # Should print 1 |
| + | echo ${#a} |
| + | |
| + | # A Japanese katakana charachter U+30a3 |
| + | a=`printf "\xe3\x82\xa3"` |
| + | # Should print 1 |
| + | echo ${#a} |
| + | |
| + | echo Ok |
shell/ash_test/ash-misc/until1.right+3 -0
shell/ash_test/ash-misc/until1.tests+11 -0
| @@ -0,0 +1,11 @@ |
| + | x=1 |
| + | until test "$x" = 4; do echo $x; x=4; done |
| + | |
| + | # We had a bug in multi-line form |
| + | x=1 |
| + | until test "$x" = 4; do |
| + | echo $x |
| + | x=4 |
| + | done |
| + | |
| + | echo Ok:$? |
shell/ash_test/ash-misc/while1.right+1 -0
shell/ash_test/ash-misc/while1.tests+2 -0
| @@ -0,0 +1,2 @@ |
| + | while false; do echo NOT SHOWN; done |
| + | echo OK:$? |
shell/ash_test/ash-misc/while2.right+2 -0
| @@ -0,0 +1,2 @@ |
| + | Hello |
| + | OK:0 |
shell/ash_test/ash-misc/while2.tests+2 -0
| @@ -0,0 +1,2 @@ |
| + | while echo Hello; false; do echo NOT SHOWN; done |
| + | echo OK:$? |
shell/ash_test/ash-misc/while4.right+1 -0
shell/ash_test/ash-misc/while4.tests+6 -0
| @@ -0,0 +1,6 @@ |
| + | false |
| + | while false && echo Not reached; do |
| + | echo BUG |
| + | break |
| + | done |
| + | echo Ok:$? |
shell/ash_test/ash-misc/while_in_subshell.right+1 -0
shell/ash_test/ash-misc/while_in_subshell.tests+2 -0
| @@ -0,0 +1,2 @@ |
| + | (while true; do exit; done) |
| + | echo OK: $? |
shell/ash_test/ash-signals/save-ret.right+2 -0
shell/ash_test/ash-signals/save-ret.tests+4 -0
| @@ -0,0 +1,4 @@ |
| + | # make sure we do not corrupt $? across traps |
| + | trap "echo YEAH; false" USR1 |
| + | kill -USR1 $$ |
| + | echo $? |
shell/ash_test/ash-vars/empty.right+3 -0
| @@ -0,0 +1,3 @@ |
| + | a b c d e f 1 2 3 4 5 6 7 8 9 0 A B C D E F |
| + | a b c d e f 1 2 3 4 5 6 7 8 9 0 A B C D E F |
| + | a b c d e f 1 2 3 4 5 6 7 8 9 0 A B C D E F |
shell/ash_test/ash-vars/empty.tests+5 -0
| @@ -0,0 +1,5 @@ |
| + | e= |
| + | |
| + | echo a b c d e f 1 2 3 4 5 6 7 8 9 0 A B C D E F |
| + | echo a $e b $e c $e d $e e $e f $e 1 $e 2 $e 3 $e 4 $e 5 $e 6 $e 7 $e 8 $e 9 $e 0 $e A $e B $e C $e D $e E $e F |
| + | echo $e a $e b $e c $e d $e e $e f $e 1 $e 2 $e 3 $e 4 $e 5 $e 6 $e 7 $e 8 $e 9 $e 0 $e A $e B $e C $e D $e E $e F |
shell/ash_test/ash-vars/glob_and_vars.right+1 -0
| @@ -0,0 +1 @@ |
| + | ./glob_and_vars.right ./glob_and_vars.tests |
shell/ash_test/ash-vars/glob_and_vars.tests+2 -0
| @@ -0,0 +1,2 @@ |
| + | v=. |
| + | echo $v/glob_and_vars.[tr]* |
shell/ash_test/ash-vars/param_expand_len.right+9 -0
| @@ -0,0 +1,9 @@ |
| + | 0 |
| + | 0 |
| + | 1 |
| + | Make sure len parsing doesnt break arg count |
| + | 0 0 |
| + | 4 4 |
| + | Testing len op |
| + | 4 3 2 1 0 0 |
| + | 0 3 0 |
shell/ash_test/ash-vars/param_expand_len.tests+17 -0
| @@ -0,0 +1,17 @@ |
| + | "$THIS_SH" -c 'echo $#' |
| + | "$THIS_SH" -c 'echo $#' arg0 |
| + | "$THIS_SH" -c 'echo $#' arg0 arg1 |
| + | |
| + | echo Make sure len parsing doesnt break arg count |
| + | set -- |
| + | echo $# ${#} |
| + | set -- aaaa bbb cc d |
| + | echo $# ${#} |
| + | |
| + | echo Testing len op |
| + | echo ${#1} ${#2} ${#3} ${#4} ${#5} ${#6} |
| + | |
| + | unset e |
| + | f=abc |
| + | g= |
| + | echo ${#e} ${#f} ${#g} |
shell/ash_test/ash-vars/param_glob.right+4 -0
| @@ -0,0 +1,4 @@ |
| + | param_glob.tests |
| + | param_glob.tests |
| + | param_glob.t* |
| + | param_glob.t* |
shell/ash_test/ash-vars/param_glob.tests+9 -0
| @@ -0,0 +1,9 @@ |
| + | if test $# = 0; then |
| + | exec "$THIS_SH" "$0" 'param_glob.t*' |
| + | echo NOT SHOWN |
| + | exit |
| + | fi |
| + | echo $* |
| + | echo $@ |
| + | echo "$*" |
| + | echo "$@" |
shell/ash_test/ash-vars/param_subshell.right+7 -0
| @@ -0,0 +1,7 @@ |
| + | 1=1 |
| + | 2=2 |
| + | 3=3 |
| + | 4=4 |
| + | 5=5 |
| + | 6=6 |
| + | 7=7 |
shell/ash_test/ash-vars/param_subshell.tests+15 -0
| @@ -0,0 +1,15 @@ |
| + | if test $# = 0; then |
| + | "$THIS_SH" "$0" 1 2 3 4 5 6 7 8 9 |
| + | exit |
| + | fi |
| + | echo 1=$1 |
| + | { echo 2=$2; } |
| + | { echo 3=$3; } & |
| + | # cant use usleep as it isnt standard in $PATH -- |
| + | # we fail when testing busybox compiled solely as "hush" |
| + | wait |
| + | ( echo 4=$4 ) |
| + | ( echo 5=$5 ) & |
| + | wait |
| + | true | echo 6=$6 | cat |
| + | true | { echo 7=$7; } | cat |
shell/ash_test/ash-vars/star.right+6 -0
| @@ -0,0 +1,6 @@ |
| + | .1. |
| + | .abc. |
| + | .d. |
| + | .e. |
| + | .f. |
| + | .1 abc d e f. |
shell/ash_test/ash-vars/star.tests+8 -0
| @@ -0,0 +1,8 @@ |
| + | if test $# = 0; then |
| + | exec "$THIS_SH" star.tests 1 abc 'd e f' |
| + | fi |
| + | # 'd e f' should be split into 3 separate args: |
| + | for a in $*; do echo ".$a."; done |
| + | |
| + | # must produce .1 abc d e f. |
| + | for a in "$*"; do echo ".$a."; done |
shell/ash_test/ash-vars/var_expand_in_assign.right+5 -0
| @@ -0,0 +1,5 @@ |
| + | . . |
| + | .abc d e. |
| + | .abc d e. |
| + | .abc d e. |
| + | .abc d e. |
shell/ash_test/ash-vars/var_expand_in_assign.tests+15 -0
| @@ -0,0 +1,15 @@ |
| + | if test $# = 0; then |
| + | exec "$THIS_SH" "$0" abc "d e" |
| + | fi |
| + | |
| + | space=' ' |
| + | echo .$space. |
| + | |
| + | a=$* |
| + | echo .$a. |
| + | a=$@ |
| + | echo .$a. |
| + | a="$*" |
| + | echo .$a. |
| + | a="$@" |
| + | echo .$a. |
shell/ash_test/ash-vars/var_expand_in_redir.right+3 -0
| @@ -0,0 +1,3 @@ |
| + | TEST1 |
| + | TEST2 |
| + | TEST3 |
shell/ash_test/ash-vars/var_expand_in_redir.tests+13 -0
| @@ -0,0 +1,13 @@ |
| + | if test $# = 0; then |
| + | exec "$THIS_SH" "$0" abc "d e" |
| + | fi |
| + | |
| + | echo TEST1 >"$1.out" |
| + | echo TEST2 >"$2.out" |
| + | # bash says: "[email protected]": ambiguous redirect |
| + | # ash handles it as if it is '$*' - we do the same |
| + | echo TEST3 >"[email protected]" |
| + | |
| + | cat abc.out "d e.out" "abc d e.out" |
| + | |
| + | rm abc.out "d e.out" "abc d e.out" |
shell/ash_test/ash-vars/var_expand_on_ifs.right+9 -0
| @@ -0,0 +1,9 @@ |
| + | 1 a b c |
| + | 2 a + b c |
| + | 3 a b c |
| + | 4 a b c |
| + | 5 a b c |
| + | 6 a b + c |
| + | 7 a b c |
| + | 8 a b c |
| + | 9 a b c |
shell/ash_test/ash-vars/var_expand_on_ifs.tests+11 -0
| @@ -0,0 +1,11 @@ |
| + | b=' b ' |
| + | e='' |
| + | echo 1 a $b c |
| + | echo 2 a +$b c |
| + | echo 3 a $e$b c |
| + | echo 4 a "$e"$b c |
| + | echo 5 a ""$b c |
| + | echo 6 a $b+ c |
| + | echo 7 a $b$e c |
| + | echo 8 a $b"$e" c |
| + | echo 9 a $b"" c |
shell/ash_test/ash-vars/var_in_pipes.right+6 -0
| @@ -0,0 +1,6 @@ |
| + | b=1 |
| + | b=2 |
| + | b=3 |
| + | b=4 |
| + | b=5 |
| + | b=6 |
shell/ash_test/ash-vars/var_in_pipes.tests+7 -0
| @@ -0,0 +1,7 @@ |
| + | b=1 env | grep ^b= |
| + | true | b=2 env | grep ^b= |
| + | a=1 true | b=3 env | grep ^b= |
| + | |
| + | (b=4 env) | grep ^b= |
| + | (true | b=5 env) | grep ^b= |
| + | (a=1 true | b=6 env) | grep ^b= |
shell/ash_test/ash-vars/var_leaks.right+1 -0
shell/ash_test/ash-vars/var_leaks.tests+14 -0
| @@ -0,0 +1,14 @@ |
| + | # external program |
| + | a=b /bin/true |
| + | env | grep ^a= |
| + | |
| + | # builtin |
| + | a=b true |
| + | env | grep ^a= |
| + | |
| + | # exec with redirection only |
| + | # in bash, this leaks! |
| + | a=b exec 1>&1 |
| + | env | grep ^a= |
| + | |
| + | echo OK |