1 /* evalstring.c - evaluate a string as one or more shell commands.
3 /* Copyright (C) 1996-2009 Free Software Foundation, Inc.
5 This file is part of GNU Bash, the Bourne Again SHell.
7 Bash is free software: you can redistribute it and/or modify
8 it under the terms of the GNU General Public License as published by
9 the Free Software Foundation, either version 3 of the License, or
10 (at your option) any later version.
12 Bash is distributed in the hope that it will be useful,
13 but WITHOUT ANY WARRANTY; without even the implied warranty of
14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 GNU General Public License for more details.
17 You should have received a copy of the GNU General Public License
18 along with Bash. If not, see <http://www.gnu.org/licenses/>.
23 #if defined (HAVE_UNISTD_H)
25 # include <sys/types.h>
36 #include "../bashansi.h"
40 #include "../builtins.h"
43 #include "../execute_cmd.h"
50 # include "../bashhist.h"
59 #define IS_BUILTIN(s) (builtin_address_internal(s, 0) != (struct builtin *)NULL)
61 extern int indirection_level
, subshell_environment
;
62 extern int line_number
;
63 extern int current_token
, shell_eof_token
;
64 extern int last_command_exit_value
;
65 extern int running_trap
;
66 extern int loop_level
;
67 extern int executing_list
;
68 extern int comsub_ignore_return
;
69 extern int posixly_correct
;
71 int parse_and_execute_level
= 0;
73 static int cat_file
__P((REDIRECT
*));
75 #define PE_TAG "parse_and_execute top"
76 #define PS_TAG "parse_string top"
80 set_history_remembering ()
82 remember_on_history
= enable_history_list
;
86 /* How to force parse_and_execute () to clean up after itself. */
88 parse_and_execute_cleanup ()
92 run_trap_cleanup (running_trap
- 1);
93 unfreeze_jobs_list ();
96 if (have_unwind_protects ())
97 run_unwind_frame (PE_TAG
);
99 parse_and_execute_level
= 0; /* XXX */
103 parse_prologue (string
, flags
, tag
)
111 orig_string
= string
;
112 /* Unwind protect this invocation of parse_and_execute (). */
113 begin_unwind_frame (tag
);
114 unwind_protect_int (parse_and_execute_level
);
115 unwind_protect_jmp_buf (top_level
);
116 unwind_protect_int (indirection_level
);
117 unwind_protect_int (line_number
);
118 unwind_protect_int (loop_level
);
119 unwind_protect_int (executing_list
);
120 unwind_protect_int (comsub_ignore_return
);
121 if (flags
& (SEVAL_NONINT
|SEVAL_INTERACT
))
122 unwind_protect_int (interactive
);
124 #if defined (HISTORY)
125 if (parse_and_execute_level
== 0)
126 add_unwind_protect (set_history_remembering
, (char *)NULL
);
128 unwind_protect_int (remember_on_history
); /* can be used in scripts */
129 # if defined (BANG_HISTORY)
130 if (interactive_shell
)
131 unwind_protect_int (history_expansion_inhibited
);
132 # endif /* BANG_HISTORY */
135 if (interactive_shell
)
137 x
= get_current_prompt_level ();
138 add_unwind_protect (set_current_prompt_level
, x
);
141 add_unwind_protect (pop_stream
, (char *)NULL
);
142 if (orig_string
&& ((flags
& SEVAL_NOFREE
) == 0))
143 add_unwind_protect (xfree
, orig_string
);
146 if (flags
& (SEVAL_NONINT
|SEVAL_INTERACT
))
147 interactive
= (flags
& SEVAL_NONINT
) ? 0 : 1;
149 #if defined (HISTORY)
150 if (flags
& SEVAL_NOHIST
)
151 bash_history_disable ();
155 /* Parse and execute the commands in STRING. Returns whatever
156 execute_command () returns. This frees STRING. FLAGS is a
157 flags word; look in common.h for the possible values. Actions
159 (flags & SEVAL_NONINT) -> interactive = 0;
160 (flags & SEVAL_INTERACT) -> interactive = 1;
161 (flags & SEVAL_NOHIST) -> call bash_history_disable ()
162 (flags & SEVAL_NOFREE) -> don't free STRING when finished
163 (flags & SEVAL_RESETLINE) -> reset line_number to 1
167 parse_and_execute (string
, from_file
, flags
)
169 const char *from_file
;
173 volatile int should_jump_to_top_level
, last_result
;
174 COMMAND
*volatile command
;
176 parse_prologue (string
, flags
, PE_TAG
);
178 parse_and_execute_level
++;
180 lreset
= flags
& SEVAL_RESETLINE
;
182 /* Reset the line number if the caller wants us to. If we don't reset the
183 line number, we have to subtract one, because we will add one just
184 before executing the next command (resetting the line number sets it to
185 0; the first line number is 1). */
186 push_stream (lreset
);
192 code
= should_jump_to_top_level
= 0;
193 last_result
= EXECUTION_SUCCESS
;
195 with_input_from_string (string
, from_file
);
196 while (*(bash_input
.location
.string
))
198 command
= (COMMAND
*)NULL
;
202 last_result
= EXECUTION_FAILURE
;
206 /* Provide a location for functions which `longjmp (top_level)' to
207 jump to. This prevents errors in substitution from restarting
208 the reader loop directly, for example. */
209 code
= setjmp (top_level
);
213 should_jump_to_top_level
= 0;
220 run_unwind_frame ("pe_dispose");
221 /* Remember to call longjmp (top_level) after the old
222 value for it is restored. */
223 should_jump_to_top_level
= 1;
228 run_unwind_frame ("pe_dispose");
229 last_result
= last_command_exit_value
= EXECUTION_FAILURE
; /* XXX */
230 if (subshell_environment
)
232 should_jump_to_top_level
= 1;
238 dispose_command (command
); /* pe_dispose does this */
244 command_error ("parse_and_execute", CMDERR_BADJUMP
, code
, 0);
249 if (parse_command () == 0)
251 if ((flags
& SEVAL_PARSEONLY
) || (interactive_shell
== 0 && read_but_dont_execute
))
253 last_result
= EXECUTION_SUCCESS
;
254 dispose_command (global_command
);
255 global_command
= (COMMAND
*)NULL
;
257 else if (command
= global_command
)
259 struct fd_bitmap
*bitmap
;
261 bitmap
= new_fd_bitmap (FD_BITMAP_SIZE
);
262 begin_unwind_frame ("pe_dispose");
263 add_unwind_protect (dispose_fd_bitmap
, bitmap
);
264 add_unwind_protect (dispose_command
, command
); /* XXX */
266 global_command
= (COMMAND
*)NULL
;
268 if ((subshell_environment
& SUBSHELL_COMSUB
) && comsub_ignore_return
)
269 command
->flags
|= CMD_IGNORE_RETURN
;
271 #if defined (ONESHOT)
274 * we were invoked as `bash -c' (startup_state == 2) AND
275 * parse_and_execute has not been called recursively AND
276 * we're not running a trap AND
277 * we have parsed the full command (string == '\0') AND
278 * we're not going to run the exit trap AND
279 * we have a simple command without redirections AND
280 * the command is not being timed AND
281 * the command's return status is not being inverted
283 * tell the execution code that we don't need to fork
285 if (startup_state
== 2 && parse_and_execute_level
== 1 &&
287 *bash_input
.location
.string
== '\0' &&
288 command
->type
== cm_simple
&&
289 signal_is_trapped (EXIT_TRAP
) == 0 &&
290 command
->redirects
== 0 && command
->value
.Simple
->redirects
== 0 &&
291 ((command
->flags
& CMD_TIME_PIPELINE
) == 0) &&
292 ((command
->flags
& CMD_INVERT_RETURN
) == 0))
294 command
->flags
|= CMD_NO_FORK
;
295 command
->value
.Simple
->flags
|= CMD_NO_FORK
;
299 /* See if this is a candidate for $( <file ). */
300 if (startup_state
== 2 &&
301 (subshell_environment
& SUBSHELL_COMSUB
) &&
302 *bash_input
.location
.string
== '\0' &&
303 command
->type
== cm_simple
&& !command
->redirects
&&
304 (command
->flags
& CMD_TIME_PIPELINE
) == 0 &&
305 command
->value
.Simple
->words
== 0 &&
306 command
->value
.Simple
->redirects
&&
307 command
->value
.Simple
->redirects
->next
== 0 &&
308 command
->value
.Simple
->redirects
->instruction
== r_input_direction
)
311 r
= cat_file (command
->value
.Simple
->redirects
);
312 last_result
= (r
< 0) ? EXECUTION_FAILURE
: EXECUTION_SUCCESS
;
315 last_result
= execute_command_internal
316 (command
, 0, NO_PIPE
, NO_PIPE
, bitmap
);
318 dispose_command (command
);
319 dispose_fd_bitmap (bitmap
);
320 discard_unwind_frame ("pe_dispose");
325 last_result
= EXECUTION_FAILURE
;
327 /* Since we are shell compatible, syntax errors in a script
328 abort the execution of the script. Right? */
335 run_unwind_frame (PE_TAG
);
337 if (interrupt_state
&& parse_and_execute_level
== 0)
339 /* An interrupt during non-interactive execution in an
340 interactive shell (e.g. via $PROMPT_COMMAND) should
341 not cause the shell to exit. */
342 interactive
= interactive_shell
;
343 throw_to_top_level ();
346 if (should_jump_to_top_level
)
347 jump_to_top_level (code
);
349 return (last_result
);
352 /* Parse a command contained in STRING according to FLAGS and return the
353 number of characters consumed from the string. If non-NULL, set *ENDP
354 to the position in the string where the parse ended. Used to validate
355 command substitutions during parsing to obey Posix rules about finding
356 the end of the command and balancing parens. */
358 parse_string (string
, from_file
, flags
, endp
)
360 const char *from_file
;
365 volatile int should_jump_to_top_level
;
366 COMMAND
*volatile command
, *oglobal
;
369 parse_prologue (string
, flags
, PS_TAG
);
371 /* Reset the line number if the caller wants us to. If we don't reset the
372 line number, we have to subtract one, because we will add one just
373 before executing the next command (resetting the line number sets it to
374 0; the first line number is 1). */
377 code
= should_jump_to_top_level
= 0;
378 oglobal
= global_command
;
381 with_input_from_string (string
, from_file
);
382 while (*(bash_input
.location
.string
))
384 command
= (COMMAND
*)NULL
;
391 /* Provide a location for functions which `longjmp (top_level)' to
393 code
= setjmp (top_level
);
398 itrace("parse_string: longjmp executed: code = %d", code
);
400 should_jump_to_top_level
= 0;
406 case DISCARD
: /* XXX */
408 dispose_command (command
);
409 /* Remember to call longjmp (top_level) after the old
410 value for it is restored. */
411 should_jump_to_top_level
= 1;
415 command_error ("parse_string", CMDERR_BADJUMP
, code
, 0);
420 if (parse_command () == 0)
422 dispose_command (global_command
);
423 global_command
= (COMMAND
*)NULL
;
427 if ((flags
& SEVAL_NOLONGJMP
) == 0)
429 should_jump_to_top_level
= 1;
433 reset_parser (); /* XXX - sets token_to_read */
437 if (current_token
== yacc_EOF
|| current_token
== shell_eof_token
)
443 global_command
= oglobal
;
444 nc
= bash_input
.location
.string
- ostring
;
446 *endp
= bash_input
.location
.string
;
448 run_unwind_frame (PS_TAG
);
450 if (should_jump_to_top_level
)
451 jump_to_top_level (code
);
456 /* Handle a $( < file ) command substitution. This expands the filename,
457 returning errors as appropriate, then just cats the file to the standard
466 if (r
->instruction
!= r_input_direction
)
469 /* Get the filename. */
470 if (posixly_correct
&& !interactive_shell
)
471 disallow_filename_globbing
++;
472 fn
= redirection_expand (r
->redirectee
.filename
);
473 if (posixly_correct
&& !interactive_shell
)
474 disallow_filename_globbing
--;
478 redirection_error (r
, AMBIGUOUS_REDIRECT
);
482 fd
= open(fn
, O_RDONLY
);
490 rval
= zcatfd (fd
, 1, fn
);