1 /* evalstring.c - evaluate a string as one or more shell commands. */
3 /* Copyright (C) 1996-2010 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"
46 #include "../bashintl.h"
51 # include "../bashhist.h"
61 #define IS_BUILTIN(s) (builtin_address_internal(s, 0) != (struct builtin *)NULL)
63 extern int indirection_level, subshell_environment;
64 extern int line_number;
65 extern int current_token, shell_eof_token;
66 extern int last_command_exit_value;
67 extern int running_trap;
68 extern int loop_level;
69 extern int executing_list;
70 extern int comsub_ignore_return;
71 extern int posixly_correct;
72 extern sh_builtin_func_t *this_shell_builtin;
74 int parse_and_execute_level = 0;
76 static int cat_file __P((REDIRECT *));
78 #define PE_TAG "parse_and_execute top"
79 #define PS_TAG "parse_string top"
83 set_history_remembering ()
85 remember_on_history = enable_history_list;
89 /* How to force parse_and_execute () to clean up after itself. */
91 parse_and_execute_cleanup ()
95 run_trap_cleanup (running_trap - 1);
96 unfreeze_jobs_list ();
99 if (have_unwind_protects ())
100 run_unwind_frame (PE_TAG);
102 parse_and_execute_level = 0; /* XXX */
106 parse_prologue (string, flags, tag)
114 orig_string = string;
115 /* Unwind protect this invocation of parse_and_execute (). */
116 begin_unwind_frame (tag);
117 unwind_protect_int (parse_and_execute_level);
118 unwind_protect_jmp_buf (top_level);
119 unwind_protect_int (indirection_level);
120 unwind_protect_int (line_number);
121 unwind_protect_int (loop_level);
122 unwind_protect_int (executing_list);
123 unwind_protect_int (comsub_ignore_return);
124 if (flags & (SEVAL_NONINT|SEVAL_INTERACT))
125 unwind_protect_int (interactive);
127 #if defined (HISTORY)
128 if (parse_and_execute_level == 0)
129 add_unwind_protect (set_history_remembering, (char *)NULL);
131 unwind_protect_int (remember_on_history); /* can be used in scripts */
132 # if defined (BANG_HISTORY)
133 if (interactive_shell)
134 unwind_protect_int (history_expansion_inhibited);
135 # endif /* BANG_HISTORY */
138 if (interactive_shell)
140 x = get_current_prompt_level ();
141 add_unwind_protect (set_current_prompt_level, x);
144 add_unwind_protect (pop_stream, (char *)NULL);
145 if (orig_string && ((flags & SEVAL_NOFREE) == 0))
146 add_unwind_protect (xfree, orig_string);
149 if (flags & (SEVAL_NONINT|SEVAL_INTERACT))
150 interactive = (flags & SEVAL_NONINT) ? 0 : 1;
152 #if defined (HISTORY)
153 if (flags & SEVAL_NOHIST)
154 bash_history_disable ();
158 /* Parse and execute the commands in STRING. Returns whatever
159 execute_command () returns. This frees STRING. FLAGS is a
160 flags word; look in common.h for the possible values. Actions
162 (flags & SEVAL_NONINT) -> interactive = 0;
163 (flags & SEVAL_INTERACT) -> interactive = 1;
164 (flags & SEVAL_NOHIST) -> call bash_history_disable ()
165 (flags & SEVAL_NOFREE) -> don't free STRING when finished
166 (flags & SEVAL_RESETLINE) -> reset line_number to 1
170 parse_and_execute (string, from_file, flags)
172 const char *from_file;
176 volatile int should_jump_to_top_level, last_result;
177 COMMAND *volatile command;
179 parse_prologue (string, flags, PE_TAG);
181 parse_and_execute_level++;
183 lreset = flags & SEVAL_RESETLINE;
185 /* Reset the line number if the caller wants us to. If we don't reset the
186 line number, we have to subtract one, because we will add one just
187 before executing the next command (resetting the line number sets it to
188 0; the first line number is 1). */
189 push_stream (lreset);
195 code = should_jump_to_top_level = 0;
196 last_result = EXECUTION_SUCCESS;
198 with_input_from_string (string, from_file);
199 while (*(bash_input.location.string))
201 command = (COMMAND *)NULL;
205 last_result = EXECUTION_FAILURE;
209 /* Provide a location for functions which `longjmp (top_level)' to
210 jump to. This prevents errors in substitution from restarting
211 the reader loop directly, for example. */
212 code = setjmp (top_level);
216 should_jump_to_top_level = 0;
223 run_unwind_frame ("pe_dispose");
224 /* Remember to call longjmp (top_level) after the old
225 value for it is restored. */
226 should_jump_to_top_level = 1;
231 run_unwind_frame ("pe_dispose");
232 last_result = last_command_exit_value = EXECUTION_FAILURE; /* XXX */
233 if (subshell_environment)
235 should_jump_to_top_level = 1;
241 dispose_command (command); /* pe_dispose does this */
247 command_error ("parse_and_execute", CMDERR_BADJUMP, code, 0);
252 if (parse_command () == 0)
254 if ((flags & SEVAL_PARSEONLY) || (interactive_shell == 0 && read_but_dont_execute))
256 last_result = EXECUTION_SUCCESS;
257 dispose_command (global_command);
258 global_command = (COMMAND *)NULL;
260 else if (command = global_command)
262 struct fd_bitmap *bitmap;
264 bitmap = new_fd_bitmap (FD_BITMAP_SIZE);
265 begin_unwind_frame ("pe_dispose");
266 add_unwind_protect (dispose_fd_bitmap, bitmap);
267 add_unwind_protect (dispose_command, command); /* XXX */
269 global_command = (COMMAND *)NULL;
271 if ((subshell_environment & SUBSHELL_COMSUB) && comsub_ignore_return)
272 command->flags |= CMD_IGNORE_RETURN;
274 #if defined (ONESHOT)
277 * we were invoked as `bash -c' (startup_state == 2) AND
278 * parse_and_execute has not been called recursively AND
279 * we're not running a trap AND
280 * we have parsed the full command (string == '\0') AND
281 * we're not going to run the exit trap AND
282 * we have a simple command without redirections AND
283 * the command is not being timed AND
284 * the command's return status is not being inverted
286 * tell the execution code that we don't need to fork
288 if (startup_state == 2 && parse_and_execute_level == 1 &&
290 *bash_input.location.string == '\0' &&
291 command->type == cm_simple &&
292 signal_is_trapped (EXIT_TRAP) == 0 &&
293 command->redirects == 0 && command->value.Simple->redirects == 0 &&
294 ((command->flags & CMD_TIME_PIPELINE) == 0) &&
295 ((command->flags & CMD_INVERT_RETURN) == 0))
297 command->flags |= CMD_NO_FORK;
298 command->value.Simple->flags |= CMD_NO_FORK;
302 /* See if this is a candidate for $( <file ). */
303 if (startup_state == 2 &&
304 (subshell_environment & SUBSHELL_COMSUB) &&
305 *bash_input.location.string == '\0' &&
306 command->type == cm_simple && !command->redirects &&
307 (command->flags & CMD_TIME_PIPELINE) == 0 &&
308 command->value.Simple->words == 0 &&
309 command->value.Simple->redirects &&
310 command->value.Simple->redirects->next == 0 &&
311 command->value.Simple->redirects->instruction == r_input_direction)
314 r = cat_file (command->value.Simple->redirects);
315 last_result = (r < 0) ? EXECUTION_FAILURE : EXECUTION_SUCCESS;
318 last_result = execute_command_internal
319 (command, 0, NO_PIPE, NO_PIPE, bitmap);
321 dispose_command (command);
322 dispose_fd_bitmap (bitmap);
323 discard_unwind_frame ("pe_dispose");
328 last_result = EXECUTION_FAILURE;
330 if (interactive_shell == 0 && this_shell_builtin &&
331 (this_shell_builtin == source_builtin || this_shell_builtin == eval_builtin) &&
332 last_command_exit_value == EX_BADSYNTAX && posixly_correct)
334 should_jump_to_top_level = 1;
336 last_command_exit_value = EX_BADUSAGE;
339 /* Since we are shell compatible, syntax errors in a script
340 abort the execution of the script. Right? */
347 run_unwind_frame (PE_TAG);
349 if (interrupt_state && parse_and_execute_level == 0)
351 /* An interrupt during non-interactive execution in an
352 interactive shell (e.g. via $PROMPT_COMMAND) should
353 not cause the shell to exit. */
354 interactive = interactive_shell;
355 throw_to_top_level ();
358 if (should_jump_to_top_level)
359 jump_to_top_level (code);
361 return (last_result);
364 /* Parse a command contained in STRING according to FLAGS and return the
365 number of characters consumed from the string. If non-NULL, set *ENDP
366 to the position in the string where the parse ended. Used to validate
367 command substitutions during parsing to obey Posix rules about finding
368 the end of the command and balancing parens. */
370 parse_string (string, from_file, flags, endp)
372 const char *from_file;
377 volatile int should_jump_to_top_level;
378 COMMAND *volatile command, *oglobal;
381 parse_prologue (string, flags, PS_TAG);
383 /* Reset the line number if the caller wants us to. If we don't reset the
384 line number, we have to subtract one, because we will add one just
385 before executing the next command (resetting the line number sets it to
386 0; the first line number is 1). */
389 code = should_jump_to_top_level = 0;
390 oglobal = global_command;
393 with_input_from_string (string, from_file);
394 while (*(bash_input.location.string))
396 command = (COMMAND *)NULL;
403 /* Provide a location for functions which `longjmp (top_level)' to
405 code = setjmp (top_level);
410 itrace("parse_string: longjmp executed: code = %d", code);
412 should_jump_to_top_level = 0;
418 case DISCARD: /* XXX */
420 dispose_command (command);
421 /* Remember to call longjmp (top_level) after the old
422 value for it is restored. */
423 should_jump_to_top_level = 1;
427 command_error ("parse_string", CMDERR_BADJUMP, code, 0);
432 if (parse_command () == 0)
434 dispose_command (global_command);
435 global_command = (COMMAND *)NULL;
439 if ((flags & SEVAL_NOLONGJMP) == 0)
441 should_jump_to_top_level = 1;
445 reset_parser (); /* XXX - sets token_to_read */
449 if (current_token == yacc_EOF || current_token == shell_eof_token)
455 global_command = oglobal;
456 nc = bash_input.location.string - ostring;
458 *endp = bash_input.location.string;
460 run_unwind_frame (PS_TAG);
462 if (should_jump_to_top_level)
463 jump_to_top_level (code);
468 /* Handle a $( < file ) command substitution. This expands the filename,
469 returning errors as appropriate, then just cats the file to the standard
478 if (r->instruction != r_input_direction)
481 /* Get the filename. */
482 if (posixly_correct && !interactive_shell)
483 disallow_filename_globbing++;
484 fn = redirection_expand (r->redirectee.filename);
485 if (posixly_correct && !interactive_shell)
486 disallow_filename_globbing--;
490 redirection_error (r, AMBIGUOUS_REDIRECT);
494 fd = open(fn, O_RDONLY);
502 rval = zcatfd (fd, 1, fn);