From f8cdc7a2bcd0a9d067f5ca7da8ce7bc9c98cf34e Mon Sep 17 00:00:00 2001 From: Denys Vlasenko Date: Fri, 4 Aug 2017 15:24:49 +0200 Subject: [PATCH] ash: BASH_XTRACEFD bashism Based on patch by Johannes Schindelin function old new delta evalcommand 1447 1500 +53 Signed-off-by: Denys Vlasenko --- shell/ash.c | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/shell/ash.c b/shell/ash.c index 2ad86c187..e80425f5e 100644 --- a/shell/ash.c +++ b/shell/ash.c @@ -188,6 +188,7 @@ #define BASH_PIPEFAIL ENABLE_ASH_BASH_COMPAT #define BASH_HOSTNAME_VAR ENABLE_ASH_BASH_COMPAT #define BASH_SHLVL_VAR ENABLE_ASH_BASH_COMPAT +#define BASH_XTRACEFD ENABLE_ASH_BASH_COMPAT #if defined(__ANDROID_API__) && __ANDROID_API__ <= 24 /* Bionic at least up to version 24 has no glob() */ @@ -9792,6 +9793,15 @@ evalcommand(union node *cmd, int flags) expredir(cmd->ncmd.redirect); redir_stop = pushredir(cmd->ncmd.redirect); preverrout_fd = 2; + if (BASH_XTRACEFD && xflag) { + /* NB: bash closes fd == $BASH_XTRACEFD when it is changed. + * we do not emulate this. We only use its value. + */ + const char *xtracefd = lookupvar("BASH_XTRACEFD"); + if (xtracefd && is_number(xtracefd)) + preverrout_fd = atoi(xtracefd); + + } status = redirectsafe(cmd->ncmd.redirect, REDIR_PUSH | REDIR_SAVEFD2); path = vpath.var_text;