hush: fix comment parsing in cmd
, closes 10421
function old new delta parse_stream 2692 2690 -2 Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
This commit is contained in:
parent
045327a418
commit
25f3b737dc
4
shell/ash_test/ash-parsing/comment2.right
Normal file
4
shell/ash_test/ash-parsing/comment2.right
Normal file
@ -0,0 +1,4 @@
|
||||
Ok1
|
||||
Ok2
|
||||
Ok5
|
||||
Ok6
|
13
shell/ash_test/ash-parsing/comment2.tests
Executable file
13
shell/ash_test/ash-parsing/comment2.tests
Executable file
@ -0,0 +1,13 @@
|
||||
echo "`echo Ok1 #comment is ignored`"
|
||||
echo `echo Ok2 #comment is ignored`
|
||||
#
|
||||
# Surprisingly, bash does not handle comments in $()
|
||||
# the same way as in ``. "#" causes the rest of the line, _including_ )",
|
||||
# to be ignored. These lines would cause an error:
|
||||
#echo "$(echo Ok3 #comment is ignored)"
|
||||
#echo $(echo Ok4 #comment is ignored)
|
||||
#
|
||||
echo "$(echo Ok5 #comment is ignored
|
||||
)"
|
||||
echo $(echo Ok6 #comment is ignored
|
||||
)
|
17
shell/hush.c
17
shell/hush.c
@ -5140,14 +5140,23 @@ static struct pipe *parse_stream(char **pstring,
|
||||
case '#':
|
||||
if (dest.length == 0 && !dest.has_quoted_part) {
|
||||
/* skip "#comment" */
|
||||
/* note: we do not add it to &ctx.as_string */
|
||||
/* TODO: in bash:
|
||||
* comment inside $() goes to the next \n, even inside quoted string (!):
|
||||
* cmd "$(cmd2 #comment)" - syntax error
|
||||
* cmd "`cmd2 #comment`" - ok
|
||||
* We accept both (comment ends where command subst ends, in both cases).
|
||||
*/
|
||||
while (1) {
|
||||
ch = i_peek(input);
|
||||
if (ch == EOF || ch == '\n')
|
||||
if (ch == '\n') {
|
||||
nommu_addchr(&ctx.as_string, '\n');
|
||||
break;
|
||||
}
|
||||
ch = i_getch(input);
|
||||
if (ch == EOF)
|
||||
break;
|
||||
i_getch(input);
|
||||
/* note: we do not add it to &ctx.as_string */
|
||||
}
|
||||
nommu_addchr(&ctx.as_string, '\n');
|
||||
continue; /* back to top of while (1) */
|
||||
}
|
||||
break;
|
||||
|
4
shell/hush_test/hush-parsing/comment2.right
Normal file
4
shell/hush_test/hush-parsing/comment2.right
Normal file
@ -0,0 +1,4 @@
|
||||
Ok1
|
||||
Ok2
|
||||
Ok5
|
||||
Ok6
|
13
shell/hush_test/hush-parsing/comment2.tests
Executable file
13
shell/hush_test/hush-parsing/comment2.tests
Executable file
@ -0,0 +1,13 @@
|
||||
echo "`echo Ok1 #comment is ignored`"
|
||||
echo `echo Ok2 #comment is ignored`
|
||||
#
|
||||
# Surprisingly, bash does not handle comments in $()
|
||||
# the same way as in ``. "#" causes the rest of the line, _including_ )",
|
||||
# to be ignored. These lines would cause an error:
|
||||
#echo "$(echo Ok3 #comment is ignored)"
|
||||
#echo $(echo Ok4 #comment is ignored)
|
||||
#
|
||||
echo "$(echo Ok5 #comment is ignored
|
||||
)"
|
||||
echo $(echo Ok6 #comment is ignored
|
||||
)
|
Loading…
Reference in New Issue
Block a user