diff options
Diffstat (limited to 'fish/fish.c')
-rw-r--r-- | fish/fish.c | 16 |
1 files changed, 16 insertions, 0 deletions
diff --git a/fish/fish.c b/fish/fish.c index fcafb5ca..a956bf9e 100644 --- a/fish/fish.c +++ b/fish/fish.c @@ -26,6 +26,7 @@ #include <unistd.h> #include <fcntl.h> #include <getopt.h> +#include <signal.h> #include <assert.h> #ifdef HAVE_LIBREADLINE @@ -359,6 +360,21 @@ script (int prompt) /* If the next character is '#' then this is a comment. */ if (*buf == '#') continue; + /* If the next character is '!' then pass the whole lot to system(3). */ + if (*buf == '!') { + int r; + + r = system (buf+1); + if (!prompt) { + if (r == -1 || + (WIFSIGNALED (r) && + (WTERMSIG (r) == SIGINT || WTERMSIG (r) == SIGQUIT)) || + WEXITSTATUS (r) != 0) + exit (1); + } + continue; + } + /* Get the command (cannot be quoted). */ len = strcspn (buf, " \t"); |