hush: Print error messages on shift -1
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
This commit is contained in:
parent
74d20e6379
commit
e59591a364
@ -1,5 +1,5 @@
|
||||
$THIS_SH -c 'shift; echo "$@"' 0 1 2 3 4
|
||||
#We do abort on -1, but then we abort. bash executes echo.
|
||||
# We do complain on -1, but then we abort. bash executes echo.
|
||||
$THIS_SH -c 'shift -1; echo "$@"' 0 1 2 3 4
|
||||
$THIS_SH -c 'shift 0; echo "$@"' 0 1 2 3 4
|
||||
$THIS_SH -c 'shift 1; echo "$@"' 0 1 2 3 4
|
||||
|
13
shell/hush.c
13
shell/hush.c
@ -9377,7 +9377,18 @@ static int FAST_FUNC builtin_shift(char **argv)
|
||||
int n = 1;
|
||||
argv = skip_dash_dash(argv);
|
||||
if (argv[0]) {
|
||||
n = atoi(argv[0]);
|
||||
n = bb_strtou(argv[0], NULL, 10);
|
||||
if (errno || n < 0) {
|
||||
/* shared string with ash.c */
|
||||
bb_error_msg("Illegal number: %s", argv[0]);
|
||||
/*
|
||||
* ash aborts in this case.
|
||||
* bash prints error message and set $? to 1.
|
||||
* Interestingly, for "shift 99999" bash does not
|
||||
* print error message, but does set $? to 1
|
||||
* (and does no shifting at all).
|
||||
*/
|
||||
}
|
||||
}
|
||||
if (n >= 0 && n < G.global_argc) {
|
||||
if (G_global_args_malloced) {
|
||||
|
10
shell/hush_test/hush-misc/shift1.right
Normal file
10
shell/hush_test/hush-misc/shift1.right
Normal file
@ -0,0 +1,10 @@
|
||||
2 3 4
|
||||
hush: Illegal number: -1
|
||||
1 2 3 4
|
||||
1 2 3 4
|
||||
2 3 4
|
||||
3 4
|
||||
4
|
||||
|
||||
1 2 3 4
|
||||
1 2 3 4
|
10
shell/hush_test/hush-misc/shift1.tests
Executable file
10
shell/hush_test/hush-misc/shift1.tests
Executable file
@ -0,0 +1,10 @@
|
||||
$THIS_SH -c 'shift; echo "$@"' 0 1 2 3 4
|
||||
#We complain on -1 and continue.
|
||||
$THIS_SH -c 'shift -1; echo "$@"' 0 1 2 3 4
|
||||
$THIS_SH -c 'shift 0; echo "$@"' 0 1 2 3 4
|
||||
$THIS_SH -c 'shift 1; echo "$@"' 0 1 2 3 4
|
||||
$THIS_SH -c 'shift 2; echo "$@"' 0 1 2 3 4
|
||||
$THIS_SH -c 'shift 3; echo "$@"' 0 1 2 3 4
|
||||
$THIS_SH -c 'shift 4; echo "$@"' 0 1 2 3 4
|
||||
$THIS_SH -c 'shift 5; echo "$@"' 0 1 2 3 4
|
||||
$THIS_SH -c 'shift 6; echo "$@"' 0 1 2 3 4
|
Loading…
Reference in New Issue
Block a user