summaryrefslogtreecommitdiff
path: root/builtins/evalstring.c
diff options
context:
space:
mode:
Diffstat (limited to 'builtins/evalstring.c')
-rw-r--r--builtins/evalstring.c33
1 files changed, 21 insertions, 12 deletions
diff --git a/builtins/evalstring.c b/builtins/evalstring.c
index 2e840685..bf4a8a5b 100644
--- a/builtins/evalstring.c
+++ b/builtins/evalstring.c
@@ -40,6 +40,8 @@
#include "common.h"
+extern void run_trap_cleanup ();
+
extern int interactive, interactive_shell;
extern int indirection_level, startup_state, subshell_environment;
extern int line_number;
@@ -62,14 +64,19 @@ parse_and_execute_cleanup ()
}
/* Parse and execute the commands in STRING. Returns whatever
- execute_command () returns. This frees STRING. INTERACT is
- the new value for `interactive' while the commands are being
- executed. A value of -1 means don't change it. */
+ execute_command () returns. This frees STRING. FLAGS is a
+ flags word; look in common.h for the possible values. Actions
+ are:
+ (flags & SEVAL_NONINT) -> interactive = 0;
+ (flags & SEVAL_INTERACT) -> interactive = 1;
+ (flags & SEVAL_NOHIST) -> call bash_history_disable ()
+*/
+
int
-parse_and_execute (string, from_file, interact)
+parse_and_execute (string, from_file, flags)
char *string;
char *from_file;
- int interact;
+ int flags;
{
int code;
volatile int should_jump_to_top_level, last_result;
@@ -83,17 +90,17 @@ parse_and_execute (string, from_file, interact)
unwind_protect_jmp_buf (top_level);
unwind_protect_int (indirection_level);
unwind_protect_int (line_number);
- if (interact != -1 && interactive != interact)
+ if (flags & (SEVAL_NONINT|SEVAL_INTERACT))
unwind_protect_int (interactive);
#if defined (HISTORY)
+ unwind_protect_int (remember_on_history); /* can be used in scripts */
+# if defined (BANG_HISTORY)
if (interactive_shell)
{
- unwind_protect_int (remember_on_history);
-# if defined (BANG_HISTORY)
unwind_protect_int (history_expansion_inhibited);
-# endif /* BANG_HISTORY */
}
+# endif /* BANG_HISTORY */
#endif /* HISTORY */
add_unwind_protect (pop_stream, (char *)NULL);
@@ -104,11 +111,12 @@ parse_and_execute (string, from_file, interact)
parse_and_execute_level++;
push_stream (1); /* reset the line number */
indirection_level++;
- if (interact != -1)
- interactive = interact;
+ if (flags & (SEVAL_NONINT|SEVAL_INTERACT))
+ interactive = (flags & SEVAL_NONINT) ? 0 : 1;
#if defined (HISTORY)
- bash_history_disable ();
+ if (flags & SEVAL_NOHIST)
+ bash_history_disable ();
#endif /* HISTORY */
code = should_jump_to_top_level = 0;
@@ -177,6 +185,7 @@ parse_and_execute (string, from_file, interact)
bitmap = new_fd_bitmap (FD_BITMAP_SIZE);
begin_unwind_frame ("pe_dispose");
add_unwind_protect (dispose_fd_bitmap, bitmap);
+ add_unwind_protect (dispose_command, command); /* XXX */
global_command = (COMMAND *)NULL;