title: How do we set OS environment variables in Airflow
body: <p>I have an airflow dag and what im trying to do is read my variables stored in the airflow UI (username and password) and pass those variable values as exported values in the OS. the reason is because I am using dbt yml file which requires me to read the environment variable 'dbt_user'. (the only other way is to set the password in the yaml file which is not secure.</p>
  <pre><code>default:
    target: dev
    outputs:
      dev:
        type: snowflake
        account: xxxx
  
        user: &quot;{{ env_var('dbt_user') }}&quot;
  </code></pre>
  <p>I tried to write a dag which does the bashoperator export but it doesnt seem to set the environment variable.</p>
  <pre><code>from airflow import DAG
  from airflow.operators.python import PythonOperator, BranchPythonOperator
  from airflow.operators.bash import BashOperator
  from airflow.operators.dummy_operator import DummyOperator
  from datetime import datetime
  from airflow.models import Variable
  import os
  
  
  default_args = {
      'owner': 'airflow',
      'depends_on_past': False,
      'start_date': datetime(2020,8,1),
      'retries': 0
  }
  
  
  with DAG('sample', default_args=default_args, schedule_interval='@once') as dag:
      task_1 = BashOperator(
          task_id='get_variables',
          bash_command='export dbt_user={{ var.value.dbt_user }} ',
          env = os.environ.copy(),
          dag=dag
      )
  
      task_2 = BashOperator(
          task_id='load_seed_data_once',
          bash_command='echo $dbt_user',
          dag=dag
      )
  
  task_1 &gt;&gt; task_2
  </code></pre>
  <p>when I tried to echo we can see nothing is being set. Does anyone know how to set an environment variable using the bashoperator?</p>
  <pre><code>[2021-11-04 12:00:34,452] {subprocess.py:63} INFO - Running command: ['bash', '-c', 'echo $dbt_user']
  [2021-11-04 12:00:34,463] {subprocess.py:74} INFO - Output:
  [2021-11-04 12:00:34,464] {subprocess.py:78} INFO - 
  [2021-11-04 12:00:34,465] {subprocess.py:82} INFO - Command exited with return code 0
  [2021-11-04 12:00:34,494] {taskinstance.py:1211} INFO - Marking task as SUCCESS. dag_id=sample, task_id=load_seed_data_once, execution_date=20211104T120032, start_date=20211104T120034, end_date=20211104T120034
  [2021-11-04 12:00:34,517] {taskinstance.py:1265} INFO - 0 downstream tasks scheduled from follow-on schedule check
  [2021-11-04 12:00:34,555] {local_task_job.py:149} INFO - Task exited with return code 0
  </code></pre>
  <p>update:</p>
  <p>I also tried doing via the python operator but it didnt work as well. It gave me a     raise KeyError(key) from None
  KeyError: 'variable_1'</p>
  <pre><code>from airflow import DAG
  from airflow.operators.python import PythonOperator, BranchPythonOperator
  from airflow.operators.bash import BashOperator
  from airflow.operators.dummy_operator import DummyOperator
  from datetime import datetime
  from airflow.models import Variable
  import os
  
  
  default_args = {
      'owner': 'airflow',
      'depends_on_past': False,
      'start_date': datetime(2020,8,1),
      'retries': 0
  }
  
  def set_env():
      os.environ[&quot;variable_1&quot;] = &quot;value_1&quot;
  
  def print_env_var():
      print(os.environ[&quot;variable_1&quot;])
  
  
  with DAG('sample', default_args=default_args, schedule_interval='@once') as dag:
      set_env_task = PythonOperator(
          task_id='python_task', 
          python_callable=set_env,
          dag=dag
      )
  
  
  
      print_env_task = PythonOperator(
          task_id='load_seed_data_once',
          python_callable=print_env_var,
          dag=dag
      )
  
  set_env_task &gt;&gt; print_env_task
  </code></pre>