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
|
$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 -1; echo "$@"' 0 1 2 3 4
|
||||||
$THIS_SH -c 'shift 0; 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 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;
|
int n = 1;
|
||||||
argv = skip_dash_dash(argv);
|
argv = skip_dash_dash(argv);
|
||||||
if (argv[0]) {
|
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 (n >= 0 && n < G.global_argc) {
|
||||||
if (G_global_args_malloced) {
|
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