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"
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 #if 0 /* XXX - for bash-4.2 */
335 should_jump_to_top_level = 1;
337 last_command_exit_value = EX_BADUSAGE;
339 internal_warning (_("syntax errors in . or eval will cause future versions of the shell to abort as Posix requires"));
343 /* Since we are shell compatible, syntax errors in a script
344 abort the execution of the script. Right? */
351 run_unwind_frame (PE_TAG);
353 if (interrupt_state && parse_and_execute_level == 0)
355 /* An interrupt during non-interactive execution in an
356 interactive shell (e.g. via $PROMPT_COMMAND) should
357 not cause the shell to exit. */
358 interactive = interactive_shell;
359 throw_to_top_level ();
362 if (should_jump_to_top_level)
363 jump_to_top_level (code);
365 return (last_result);
368 /* Parse a command contained in STRING according to FLAGS and return the
369 number of characters consumed from the string. If non-NULL, set *ENDP
370 to the position in the string where the parse ended. Used to validate
371 command substitutions during parsing to obey Posix rules about finding
372 the end of the command and balancing parens. */
374 parse_string (string, from_file, flags, endp)
376 const char *from_file;
381 volatile int should_jump_to_top_level;
382 COMMAND *volatile command, *oglobal;
385 parse_prologue (string, flags, PS_TAG);
387 /* Reset the line number if the caller wants us to. If we don't reset the
388 line number, we have to subtract one, because we will add one just
389 before executing the next command (resetting the line number sets it to
390 0; the first line number is 1). */
393 code = should_jump_to_top_level = 0;
394 oglobal = global_command;
397 with_input_from_string (string, from_file);
398 while (*(bash_input.location.string))
400 command = (COMMAND *)NULL;
407 /* Provide a location for functions which `longjmp (top_level)' to
409 code = setjmp (top_level);
414 itrace("parse_string: longjmp executed: code = %d", code);
416 should_jump_to_top_level = 0;
422 case DISCARD: /* XXX */
424 dispose_command (command);
425 /* Remember to call longjmp (top_level) after the old
426 value for it is restored. */
427 should_jump_to_top_level = 1;
431 command_error ("parse_string", CMDERR_BADJUMP, code, 0);
436 if (parse_command () == 0)
438 dispose_command (global_command);
439 global_command = (COMMAND *)NULL;
443 if ((flags & SEVAL_NOLONGJMP) == 0)
445 should_jump_to_top_level = 1;
449 reset_parser (); /* XXX - sets token_to_read */
453 if (current_token == yacc_EOF || current_token == shell_eof_token)
459 global_command = oglobal;
460 nc = bash_input.location.string - ostring;
462 *endp = bash_input.location.string;
464 run_unwind_frame (PS_TAG);
466 if (should_jump_to_top_level)
467 jump_to_top_level (code);
472 /* Handle a $( < file ) command substitution. This expands the filename,
473 returning errors as appropriate, then just cats the file to the standard
482 if (r->instruction != r_input_direction)
485 /* Get the filename. */
486 if (posixly_correct && !interactive_shell)
487 disallow_filename_globbing++;
488 fn = redirection_expand (r->redirectee.filename);
489 if (posixly_correct && !interactive_shell)
490 disallow_filename_globbing--;
494 redirection_error (r, AMBIGUOUS_REDIRECT);
498 fd = open(fn, O_RDONLY);
506 rval = zcatfd (fd, 1, fn);