.. index::
   single: script (tutorial)
   single: ECF_HOME (tutorial)
    
.. _tutorial-defining-a-task:

Defining the first task
=======================

Next, we need to write the :term:`ecf script` for the task **t1**. 

By default ecFlow expects files to be in a directory structure below ECF_HOME that reflect the hierarchy of the suites. The :term:`task` **t1** being in the :term:`suite` test, the :term:`ecf script` for the task **t1** must be in a sub-directory test.

* In ECF_HOME, create a directory test:

  .. code-block:: shell

    mkdir test

* In test, create a file :file:`t1.ecf` with the following contents:

  .. code-block:: shell
    :caption: $HOME/course/test/t1.ecf

    %include "../head.h" 
    echo "I am part of a suite that lives in %ECF_HOME%" 
    %include "../tail.h" 


.. _job-creation:

Job creation
------------

Before submitting the task, the server will transform the :term:`ecf script` to a :term:`job file`. 

- This process is known as :term:`job creation`. 
- This involves locating the :term:`ecf script` on disk, and then :term:`pre-processing` the :term:`directives`. 
- This process includes performing :term:`variable substitution`. 
- This will create a file with a '.job' extension.
- This is the script that :term:`ecflow_server` will submit to your system.

In our case:

* %include "../head.h" will be substituted by the content of the file :ref:`tutorial-head_h`.

  Note that the file name is given relatively to the file :file:`t1.ecf`, i.e. in the directory above the one containing :file:`t1.ecf`
   
* %ECF_HOME% will be substituted by the value of the variable ECF_HOME
* %include *"../tail.h"* will be substituted by the content of the file :ref:`tutorial-tail_h`


**What to do:**

#. Create the :term:`ecf script` :file:`t1.ecf` in **$HOME/course/test** directory

