File tree Expand file tree Collapse file tree 5 files changed +15
-6
lines changed Expand file tree Collapse file tree 5 files changed +15
-6
lines changed Original file line number Diff line number Diff line change 101
101
./test_fixed.bash
102
102
./test_fixed.bash
103
103
./test_builtins.bash
104
+ ./test_fixed.bash
Original file line number Diff line number Diff line change @@ -117,9 +117,7 @@ pub trait Command {
117
117
self . get_text ( ) . replace ( "\n " , " " )
118
118
}
119
119
fn get_redirects ( & mut self ) -> & mut Vec < Redirect > ;
120
- fn get_lineno ( & mut self ) -> usize {
121
- panic ! ( "IMPLEMENT!!" )
122
- }
120
+ fn get_lineno ( & mut self ) -> usize ;
123
121
fn set_force_fork ( & mut self ) ;
124
122
fn boxed_clone ( & self ) -> Box < dyn Command > ;
125
123
fn force_fork ( & self ) -> bool ;
@@ -129,13 +127,14 @@ pub trait Command {
129
127
feeder : & mut Feeder ,
130
128
core : & mut ShellCore ,
131
129
) -> Result < ( ) , ParseError > {
130
+ let lineno = self . get_lineno ( ) ;
132
131
for r in self . get_redirects ( ) . iter_mut ( ) {
133
132
if r. called_as_heredoc {
134
133
continue ;
135
134
}
136
135
if r. symbol == "<<" || r. symbol == "<<-" {
137
136
r. called_as_heredoc = true ;
138
- r. eat_heredoc ( feeder, core) ?;
137
+ r. eat_heredoc ( feeder, core, lineno ) ?;
139
138
}
140
139
}
141
140
Ok ( ( ) )
Original file line number Diff line number Diff line change @@ -99,6 +99,10 @@ impl Command for SimpleCommand {
99
99
fn force_fork ( & self ) -> bool {
100
100
self . force_fork
101
101
}
102
+
103
+ fn get_lineno ( & mut self ) -> usize {
104
+ self . lineno
105
+ }
102
106
}
103
107
104
108
impl SimpleCommand {
Original file line number Diff line number Diff line change @@ -9,7 +9,7 @@ use crate::elements::word::WordMode;
9
9
use crate :: error:: exec:: ExecError ;
10
10
use crate :: error:: parse:: ParseError ;
11
11
use crate :: utils:: { exit, file_check} ;
12
- use crate :: { Feeder , ShellCore } ;
12
+ use crate :: { error , Feeder , ShellCore } ;
13
13
use nix:: unistd;
14
14
use nix:: unistd:: ForkResult ;
15
15
use std:: fs:: { File , OpenOptions } ;
@@ -282,6 +282,7 @@ impl Redirect {
282
282
& mut self ,
283
283
feeder : & mut Feeder ,
284
284
core : & mut ShellCore ,
285
+ lineno : usize ,
285
286
) -> Result < ( ) , ParseError > {
286
287
let remove_tab = self . symbol == "<<-" ;
287
288
let end = match self . right . eval_as_value ( core) {
@@ -297,7 +298,11 @@ impl Redirect {
297
298
298
299
loop {
299
300
if feeder. is_empty ( ) {
300
- feeder. feed_additional_line ( core) ?;
301
+ if feeder. feed_additional_line ( core) . is_err ( ) {
302
+ let msg = format ! ( "warning: here-document at line {} delimited by end-of-file (wanted {})" , lineno, & self . right. text) ;
303
+ error:: print ( & msg, core) ;
304
+ break ;
305
+ }
301
306
302
307
if remove_tab {
303
308
let len = feeder. scanner_tabs ( ) ;
You can’t perform that action at this time.
0 commit comments