'Execute the bash command in a temporary directory
which will be cleaned afterwards'

def execute(self, context):

    bash_command = self.bash_command
    logging.info(('tmp    dir    root    location:    \n' + gettempdir()))
    with TemporaryDirectory(prefix='airflowtmp') as tmp_dir:
        with NamedTemporaryFile(dir=tmp_dir, prefix=self.task_id) as f:
            f.write(bytes(bash_command, 'utf_8'))
            f.flush()
            fname = f.name
            script_location = ((tmp_dir + '/') + fname)
            logging.info('Temporary    script    location    :{0}'.format(script_location))
            logging.info(('Running    command:    ' + bash_command))
            sp = Popen(['bash', fname], stdout=PIPE, stderr=STDOUT, cwd=tmp_dir, env=self.env, preexec_fn=os.setsid)
            self.sp = sp
            logging.info('Output:')
            line = ''
            for line in iter(sp.stdout.readline, ''):
                line = line.decode(self.output_encoding).strip()
                logging.info(line)
            sp.wait()
            logging.info('Command    exited    with    return    code    {0}'.format(sp.returncode))
            if sp.returncode:
                raise AirflowException('Bash    command    failed')
    if self.xcom_push_flag:
        return line
