airflow.operators.bash_operator
¶
Module Contents¶
-
class
airflow.operators.bash_operator.
BashOperator
(bash_command, xcom_push=False, env=None, output_encoding='utf-8', *args, **kwargs)[source]¶ Bases:
airflow.models.BaseOperator
Execute a Bash script, command or set of commands.
See also
For more information on how to use this operator, take a look at the guide: BashOperator
- Parameters
bash_command (str) – The command, set of commands or reference to a bash script (must be ‘.sh’) to be executed. (templated)
xcom_push (bool) – If xcom_push is True, the last line written to stdout will also be pushed to an XCom when the bash command completes.
env (dict) – If env is not None, it must be a mapping that defines the environment variables for the new process; these are used instead of inheriting the current process environment, which is the default behavior. (templated)
output_encoding (str) – Output encoding of bash command
Warning
Care should be taken with “user” input or when using Jinja templates in the
bash_command
, as this bash operator does not perform any escaping or sanitization of the command.This applies mostly to using “dag_run” conf, as that can be submitted via users in the Web UI. Most of the default template variables are not at risk.
For example, do not do this:
bash_task = BashOperator( task_id="bash_task", bash_command='echo "Here is the message: \'{{ dag_run.conf["message"] if dag_run else "" }}\'"', )
Instead, you should pass this via the
env
kwarg and use double-quotes inside the bash_command, as below:bash_task = BashOperator( task_id="bash_task", bash_command='echo "here is the message: \'$message\'"', env={'message': '{{ dag_run.conf["message"] if dag_run else "" }}'}, )