host exécute une commande Windows, Linux, ou MacOS
unix alias de host()

## Séquence d'appel

    status = host(commands)

    status = unix(commands)

## Arguments

commands

  texte unique constitué d'instructions à soumettre à l'interpréteur de commandes du système d'exploitation (Windows, Linux, ou MacOS) pour exécution.

  Sous Windows, `commands` doit avoir au maximum 8191 caractères (après expansion des éventuelles variables d'environnement incluses).

status

  un entier: -1 si la commande ne peut pas être exécutée (par exemple pour mémoire insuffisante). Si la commande est exécutée (avec succès ou non) : code entier de sortie retourné par l'interpréteur de commande.

  Sous Windows, 0 est le plus souvent retourné en cas d'exécution sans erreur.

## Description

`host(…)`

- créée une session de l'interpréteur de commande du système d'exploitation (OS) (sh avec Linux, cmd.exe avec Windows, etc..).
- envoie la `commands` à l'interpréteur,
- attend que l'interpréteur de l'OS l'exécute,
- reçoit tous les messages normalement affichés dans le terminal de l'interpréteur,
- et ferme la session de l'interpréteur.

La session de l'interpréteur de commandes créée est un clône de la session OS depuis laquelle Scilab a été lancé. En conséquence, son contexte est le suivant :

- Son dossier initial de travail (CWD) est le dossier de travail de la session Scilab lors de l'appel à `host(…)`.
- Ses variables d'environnement initiales sont identiques (noms et valeurs) à celles du terminal OS dans lequel la session Scilab fonctionne (consolebox), au moment où host() est appelée. Elles peuvent être modifiées avec setenv avant l'appel à host().
- Toute modification dans la session host() du dossier de travail et/ou des variables d'environnement n'a aucun effet ni sur le dossier de travail de la session Scilab, ni sur les variables d'environnement du terminal OS dans lequel la session Scilab fonctionne.

Les messages de résultat et/ou d'erreur issus de l'interpréteur et normalement affichés dans son propre terminal sont détournés et affichés dans le terminal de lancement de Scilab (pour MS Windows, dans la consolebox).

host() doit être préférée à son alias unix(), dont le nom prête à confusion.
`host cls;` efface le contenu de la consolebox (MS Windows).

## Exemples

### Pour les utilisateurs de Windows :

Dossier de travail dans les sessions respectives de Scilab / de l'interpréteur DOS :

    pwd                 // Dossier de travail courant dans la session Scilab
    if getos()=="Windows"
        host cls;
        consolebox on;
        host cd;        // Dossier de travail initial dans la session de l'interpréteur de l'OS
    else
        host pwd;
    end
    // Les chemins affichés dans le terminal DOS/consolebox et dans la console Scilab sont les mêmes.

Affichage dans le terminal DOS de Scilab (consolebox) :

    host cls;
    host "echo Scilab host() function";
    host "echo A & echo BC";
    host("echo DEF"+ascii(10)+"echo G");
    host("echo Dossier de travail: & cd");
    host dira;   // => erreur : commande inconnue

    Scilab host() function
    A
    BC
    DEF
    Dossier de travail:
    C:\Scilab\tests
    'dira' n'est pas reconnu en tant que commande interne
    ou externe, un programme exécutable ou un fichier de commandes.

Variables d'environnement du DOS, respectivement dans les sessions Scilab et host() :

    setenv TEST AAAA;
    getenv NUMBER_OF_PROCESSORS
    host cls;
    host "echo %TEST%";
    host "echo %USERNAME% %NUMBER_OF_PROCESSORS%";
    host "set TEST=BBBB";
    getenv TEST

Affichage : les lignes ci-dessous préfixées avec ":" sont affichées dans la consolebox (DOS). Les autres sont affichées dans la console Scilab :

    --> setenv TEST AAAA;
    --> getenv NUMBER_OF_PROCESSORS
     ans  =
     2

    --> host cls;
    --> host "echo %TEST%";
    : AAAA

    --> host "echo %USERNAME% %NUMBER_OF_PROCESSORS%";
    : Samuel 2

    --> host "set TEST=BBBB"  // correctement exécuté :
     ans  =
       0.

    --> getenv TEST
     ans  =
     AAAA

### Exemples d'application :

Fonction openURL() portable basée sur host():

        function openURL(url)
            if getos()=="Windows"
                winopen(url)
            elseif getos()=="Linux"
                host("xdg-open """+url+"""")
            elseif getos()=="Darwin"         // Mac OS
                host("open """+url+"""")
            else
                warning("openURL: OS inconnu")
            end
        endfunction

        // Utilisation :
        openURL("https://help.scilab.org/docs/current/en_US/host.html")

## Voir aussi

- consolebox
- getos
- setenv
- unix_g
- unix_s
- unix_w
- unix_x
- dos
- powershell
- Liste de codes de sortie des commandes MS Windows