IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Shell et commandes GNU Discussion :

Prendre en compte le Prompt dans une commande


Sujet :

Shell et commandes GNU

  1. #1
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2015
    Messages
    83
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2015
    Messages : 83
    Par défaut Prendre en compte le Prompt dans une commande
    Bonsoir tous le monde, je voudrai exécuter une commande bash sur un serveur linux depuis PHP. Je voudrai que cette commande s'exécute à un certains temps. Donc j'utilise
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    at XX:XX && ma_commande
    Le problème c'est que at contient un prompt (ce qui requiert une saisie manuelle).
    Nom : ea49be0f61ea4a2cb60938b1d3eb882f.png
Affichages : 468
Taille : 3,3 Ko

    Le && ne fonctionne donc pas. Je vais essayer avec un script mais je ne pense pas que ça marchera.
    L'idéal serai que "ça tienne" en une commande.
    Avez-vous une idée ?
    Merci

  2. #2
    Expert confirmé
    Avatar de Jipété
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    11 129
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 11 129
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    # echo "touch bidon" > fic.fic
    # cat fic.fic 
    touch bidon
    # ls b*
    #
    # at now -f fic.fic 
    warning: commands will be executed using /bin/sh
    job 2 at Tue Dec 27 00:39:00 2016
    # ls b*
    bidon
    #
    man at pour en savoir plus, comm' d'hab'

  3. #3
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2015
    Messages
    83
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2015
    Messages : 83
    Par défaut
    Désolé mais j'ai rien compris à ton code mais je vais lire la doc merci.

  4. #4
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2015
    Messages
    83
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2015
    Messages : 83
    Par défaut
    Comme je n'ai toujours pas trouvé la solution à mon problème j'ai poser la questions sur d'autres forum ce qui ma fait prendre conscience que je n'étais pas assez claire dans mes explications.
    Voici un post mieux expliqué:


    Mettons PHP de côté.
    Mon objectif et de pouvoir écrire une commande dans mon terminal qui s'exécutera à un moment précis. On va dire que c'est la commande "ls".
    Je tape donc :
    Code:
    pour pouvoir rentrer une commande qui s'exécutera à 23:45.


    J'obtiens un prompt qui requiert donc une saisie de la part de l'utilisateur.
    Après le at je tape ma commande "ls" et je fais CTRL+D pour fermer la saisie et valider la "programmation" de ma commande.
    Maintenant ma commande s'exécutera à 23:45.
    Ca c'est le fonctionnent de la commande at.

    Maintenant pour pouvoir intégrer cette commande à shell_exec() je voudrai pouvoir l'écrire en une ligne.
    Donc je fais :
    Ce qui ne marche évidement pas car la commande "at 23:45" requiert une saisie utilisateur (et ce sont 2 commandes distinctes). Une fois cette saisie faite ma deuxième commande "ls" sera exécutée.
    C'est pour ça que je me demandais si il n'y avait pas la possibilité d'écrire dans un prompt via une commande comme ceci par exemple pour qu'un serveur puisse l'exécuté sans intervention humaine et que celle-ci tienne dans en une ligne pour qu'elle soit envoyé par shell_exec():
    Exemple faux:
    J'ai essayé d'expliquer du mieux que j'ai pu. Désolé si je ne suis pas encore très claire.

  5. #5
    Modérateur
    Avatar de N_BaH
    Profil pro
    Inscrit en
    Février 2008
    Messages
    7 658
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 7 658
    Par défaut
    tu reviens, c'est que tu as lu la doc !
    et donc, qu'as-tu compris des commandes de Jipété ?

    par contre, ta demande est très claire depuis le début : tu veux passer une commande à at sur son entrée standard.
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  6. #6
    Modérateur
    Avatar de jlliagre
    Homme Profil pro
    Ingénieur support avancé & développement
    Inscrit en
    Juin 2007
    Messages
    2 695
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur support avancé & développement
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 2 695
    Par défaut
    L'option "-f" de la commande "at" peut être aussi utile.

  7. #7
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2015
    Messages
    83
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2015
    Messages : 83
    Par défaut
    Citation Envoyé par N_BaH Voir le message
    tu reviens, c'est que tu as lu la doc !
    et donc, qu'as-tu compris des commandes de Jipété ?

    par contre, ta demande est très claire depuis le début : tu veux passer une commande à at sur son entrée standard.
    Je l'ai lue mais je n'ai rien trouvé d'intéressant.

    Citation Envoyé par jlliagre Voir le message
    L'option "-f" de la commande "at" peut être aussi utile.
    Ah oui merci j'étais passer dessus sans vraiment y prêtée attention.
    "-f fichier
    Lire la commande à exécuter dans le fichier et non pas sur l'entrée standard."
    Par contre je ne comprend pas la mention "dans le fichier".

  8. #8
    Modérateur
    Avatar de N_BaH
    Profil pro
    Inscrit en
    Février 2008
    Messages
    7 658
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 7 658
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    $ echo 'touch fichierBidon' | at $(date -d +2min +%H:%M)
    warning: commands will be executed using /bin/sh
    job 3 at Thu Dec 29 16:10:00 2016
    $ atq
    3       Thu Dec 29 16:10:00 2016 a nbah
    ...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    $ date
    jeudi 29 décembre 2016, 16:10:06 (UTC+0100)
    $ ls
    -rw-r--r-- 1 nbah nbah    0 déc.  29 16:10 fichierBidon
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  9. #9
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2015
    Messages
    83
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2015
    Messages : 83
    Par défaut
    Merci pour ta réponse, j'ai essayer ton code, il marche mais je ne le comprends pas.
    Désolé, je ne m'y connais pas encore beaucoup avec les commandes Unix.

    Je ne vois pas pourquoi tu utilise echo.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    'touch fichierBidon' | at $(date -d +2min +%H:%M)
    Là tu créer le fichier "fichierBidon" et à l'intérieur tu écris " at $(date -d +2min +%H:%M)"

    Je ne comprend pas :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    at $(date -d +2min +%H:%M)
    J'ai juste vu que -d "Est un alias pour atrm." et atrm effaces toutes les "programmation" précédentes.

  10. #10
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2015
    Messages
    83
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2015
    Messages : 83
    Par défaut
    Bonsoir tous le monde, j'ai enfin une solution qui n'est pas casse tête sur ce site :
    http://home.gna.org/unix-initiation/website/node86.html

    Il suffit d'utiliser "pipe".
    Ce mécanisme permet d'enchaîner l'exécution de plusieurs commandes, en branchant la sortie d'une commande sur l'entrée de la suivante, à l'aide du symbole '|'
    Du coup ça me donne par exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    echo "mkdir test1 && mkdir test2" | at 00:52
    Du coup l'entrée de mon prompt devient "mkdir test1 && mkdir test2".

    Merci beaucoup pour votre aide.

  11. #11
    Modérateur
    Avatar de N_BaH
    Profil pro
    Inscrit en
    Février 2008
    Messages
    7 658
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 7 658
    Par défaut
    -d "Est un alias pour atrm."
    mais là, il s'agit de l'option -d de date, et non de at !
    Du coup l'entrée de mon prompt devient "mkdir test1 && mkdir test2".
    il ne s'agit pas de l'entrée du prompt, mais de l'entrée standard de la commande.
    le prompt n'est qu'un message d'attente du mode interactif d'une commande.
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  12. #12
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2015
    Messages
    83
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2015
    Messages : 83
    Par défaut
    Citation Envoyé par N_BaH Voir le message
    il ne s'agit pas de l'entrée du prompt, mais de l'entrée standard de la commande.
    le prompt n'est qu'un message d'attente du mode interactif d'une commande.
    Ok merci pour la précision.

  13. #13
    Modérateur
    Avatar de jlliagre
    Homme Profil pro
    Ingénieur support avancé & développement
    Inscrit en
    Juin 2007
    Messages
    2 695
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur support avancé & développement
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 2 695
    Par défaut
    Citation Envoyé par Spixz Voir le message
    Ah oui merci j'étais passer dessus sans vraiment y prêtée attention.
    "-f fichier
    Lire la commande à exécuter dans le fichier et non pas sur l'entrée standard."
    Par contre je ne comprend pas la mention "dans le fichier".
    Tu n'avais manifestement pas compris non plus "entrée standard".

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 2
    Dernier message: 27/05/2014, 13h12
  2. Réponses: 6
    Dernier message: 10/02/2011, 08h38
  3. [XL-2003] Masquer une cellule et ne pas prendre en compte sa valeur dans les calculs
    Par *.Har(d)t dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 30/10/2009, 11h07
  4. select * dans une commande d'1 dataenvirronnement
    Par Sandrine44 dans le forum VB 6 et antérieur
    Réponses: 9
    Dernier message: 02/02/2005, 17h15
  5. Ne pas tenir compte des accents dans une requete
    Par zamanika dans le forum Installation
    Réponses: 8
    Dernier message: 08/11/2004, 19h49

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo