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 :

debian 6 et script bash, SH


Sujet :

Shell et commandes GNU

  1. #1
    Membre du Club
    Inscrit en
    Août 2012
    Messages
    9
    Détails du profil
    Informations forums :
    Inscription : Août 2012
    Messages : 9
    Par défaut debian 6 et script bash, SH
    bonjour a tous

    j'ai installé debian 6 et depuis je ne peux plus utiliser un script en bash depuis un fichier php

    le sh n'aime pas dans le code les > ou <<< ......

    donc comment pourriez vous m'interpréter

    ce code sans les < et >>>

    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    "ed -s  /home/".$fichier."  <<<$'g/Connection refused\|refused to talk to me/' >  /home/".$fichier."ANTI.txt"
    merci de votre aide !!

  2. #2
    Expert confirmé Avatar de frp31
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Juillet 2006
    Messages
    5 196
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Juillet 2006
    Messages : 5 196
    Par défaut
    encore un truc codé à l'arrache et du coup non portable...
    ????

    peut etre utiliser les "\" de protection pour les caractères spéciaux.

  3. #3
    Membre du Club
    Inscrit en
    Août 2012
    Messages
    9
    Détails du profil
    Informations forums :
    Inscription : Août 2012
    Messages : 9
    Par défaut
    Non pas à l'arrache mais bon le shell c'est pas mon fort....

    Faut juste comprendre comment on peut éviter les chevrons ...

    Voici l'erreur donnée :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SH:Syntax error: redirection unexpected

  4. #4
    Rédacteur

    Avatar de ok.Idriss
    Homme Profil pro
    IS Consultant
    Inscrit en
    Février 2009
    Messages
    5 220
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : IS Consultant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2009
    Messages : 5 220
    Par défaut
    Bonjour.

    Je ne vois d'ailleurs vraiment pas l'intérêt de passer par une commande externe pour faire ça dans un script PHP ...

    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    #!/usr/bin/php
    <?php
            $path_file = "...";
            $file = fopen ($path_file, "r");
     
            $content = "";
            while (!feof($file)){
                    $line = fgets($file);
                    if (preg_match("/Connection refused|refused to talk to me/", $line)){
                            $content .= $line;
                    }
            }
     
            file_put_contents ($path_file . "ANTI.txt", $content);
    ?>

    Et y-a sûrement des façons plus simples de le faire ... quoiqu'il en soit faut éviter de passer par des commandes externes dans un programme autant que possible.

    Si tu tiens absolument à passer par une commande shell, un simple grep fera l'affaire ...

    Cordialement,
    Idriss

  5. #5
    Membre du Club
    Inscrit en
    Août 2012
    Messages
    9
    Détails du profil
    Informations forums :
    Inscription : Août 2012
    Messages : 9
    Par défaut
    oui pourquoi pas en effet direct en php ...

    par contre le grep j'aimerais savoir ce que pourrait donner la commande exact si possible

    merci

  6. #6
    Rédacteur

    Avatar de ok.Idriss
    Homme Profil pro
    IS Consultant
    Inscrit en
    Février 2009
    Messages
    5 220
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : IS Consultant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2009
    Messages : 5 220
    Par défaut
    Bonjour.

    Avec grep/egrep :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    grep -E "Connection refused|refused to talk to me" fichier_entree > fichier_sortie
    # ou
    egrep "Connection refused|refused to talk to me" fichier_entree > fichier_sortie
    Par contre, encore une fois, c'est largement préférable de le faire en PHP pour ton script.

    Cordialement,
    Idriss

  7. #7
    Membre du Club
    Inscrit en
    Août 2012
    Messages
    9
    Détails du profil
    Informations forums :
    Inscription : Août 2012
    Messages : 9
    Par défaut
    merci pour l'info !

    par contre le truc au depart c'est d'eviter les chevrons...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    egrep "Connection refused|refused to talk to me" fichier_entree > fichier_sortie

  8. #8
    Rédacteur

    Avatar de ok.Idriss
    Homme Profil pro
    IS Consultant
    Inscrit en
    Février 2009
    Messages
    5 220
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : IS Consultant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2009
    Messages : 5 220
    Par défaut
    Citation Envoyé par fred___ Voir le message
    par contre le truc au départ c'est d’éviter les chevrons...
    Il faut re-tester, l'erreur que tu as eu précédemment n'est pas forcemment vraie pour toutes les commandes (là il y a une simple redirection et si ça ne fonctionne pas c'est que ton shell ne va pas bien ).

    Ou alors il faut debugger le script, par exemple afficher la commande (vu qu'il y a des variables concaténées) et la copier/coller dans le shell si l'erreur n'est pas flagrante.

    N'hésites pas à passer en si c'est le cas sinon

    Idriss

  9. #9
    Membre du Club
    Inscrit en
    Août 2012
    Messages
    9
    Détails du profil
    Informations forums :
    Inscription : Août 2012
    Messages : 9
    Par défaut
    oui le pire c'est que ca marche quand je suis en ssh bash ecrit direct

    ed -s /home/coco <<<$'g/Connection refused\|refused to talk to me/' > /home/ANTI.txt me ressort nickel

    et quand je passe par le script de cette maniere php /home/script.php appelant cette ligne de commande par shell_exec parmis d'autre sans chevrons (qui eux marchent)

    ca me ressort l'erreur ..suis pas le seul mais pas trouvé de reel solution...

  10. #10
    Rédacteur

    Avatar de ok.Idriss
    Homme Profil pro
    IS Consultant
    Inscrit en
    Février 2009
    Messages
    5 220
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : IS Consultant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2009
    Messages : 5 220
    Par défaut
    mais pas trouvé de reel solution...
    Encore une fois, la meilleur solution, dans ton cas, restera de le faire directement en PHP (que la redirection bash veuille fonctionner ou pas)

  11. #11
    Expert confirmé
    Homme Profil pro
    Développeur informatique en retraite
    Inscrit en
    Avril 2008
    Messages
    2 102
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côtes d'Armor (Bretagne)

    Informations professionnelles :
    Activité : Développeur informatique en retraite

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 102
    Par défaut
    Citation Envoyé par fred___ Voir le message
    Voici l'erreur donnée :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SH:Syntax error: redirection unexpected
    C'est bizarre, ce "SH" en majuscules!
    Je n'y connais pas grand-chose en PHP, mais Il faudrait comprendre quel est le shell lancé par php.
    Si tu veux rester dans l'utilisation de scripts depuis PHP, pour savoir quel shell est utilisé, tu peux essayer, par exemple, de lui faire exécuter quelque chose comme ps -ef | fgrep $$.

    Ce n'est peut-être pas le bon shell, je veux dire, pas un vrai bash.
    C'est peut-être configurable dans PHP.
    Peut-être ton système précédent avait un lien /bin/sh -> /bin/bash.
    Peut-être que tu peux mettre ta commande dans un script avec le bon shebang que tu passes à PHP.
    Peut-être d'autres peut-être...
    )jack(

  12. #12
    Membre du Club
    Inscrit en
    Août 2012
    Messages
    9
    Détails du profil
    Informations forums :
    Inscription : Août 2012
    Messages : 9
    Par défaut
    salut jack

    Voici ce que je recup !

    coco=>debian6

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    root@coco:~# ps -ef | fgrep $$
    root      4310  3565  9 11:06 pts/1    00:00:00 -bash
    root      4375  4310  0 11:06 pts/1    00:00:00 ps -ef
    root      4376  4310  0 11:06 pts/1    00:00:00 fgrep 4310
    coco2 => plesk

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    coco2:~# ps -ef | fgrep $$
    root     24213 24190  0 11:09 pts/0    00:00:00 -bash
    root     24217 24213  0 11:09 pts/0    00:00:00 ps -ef
    root     24218 24213  0 11:09 pts/0    00:00:00 -bash
    Après ce que ça veut dire ...........

  13. #13
    Rédacteur

    Avatar de ok.Idriss
    Homme Profil pro
    IS Consultant
    Inscrit en
    Février 2009
    Messages
    5 220
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : IS Consultant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2009
    Messages : 5 220
    Par défaut
    Bonjour.

    Alors là il s'agit de l'utilisateur root avec lequel tu te connecte en SSH, ce n'est probablement pas le même utilisateur avec lequel le script PHP est exécuté.

    PHP comme Perl ou autre langage de programmation exécute les commandes systèmes dans le shell de l'utilisateur courant. J'imagine que PHP est ici utilisé en mode web via un serveur HTTP tel que apache.

    Si c'est bien le cas, c'est le shell de l'utilisateur d'apache qu'il faut observer (www-data) :

    Chez moi (Ubuntu 12.04) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    [root@hp-dv6:~]# su - www-data
    $ echo $SHELL
    /bin/sh
    Cependant sous mon Ubuntu :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    [root@hp-dv6:~]# ls -la /bin/sh
    lrwxrwxrwx 1 root root 9 juin   3 21:47 /bin/sh -> /bin/bash
    Essayes de reproduire ces commandes chez toi et dit nous ce que cela donnes.

    Cordialement,
    Idriss

  14. #14
    Membre du Club
    Inscrit en
    Août 2012
    Messages
    9
    Détails du profil
    Informations forums :
    Inscription : Août 2012
    Messages : 9
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    echo $SHELL
    /bin/bash
     
     
    ls -la /bin/sh
    lrwxrwxrwx 1 root root 4  1 juin  17:22 /bin/sh -> dash
    dash......je regarde aussi de mon coté pourquoi c'est dash et pas bash comme d'hab...

  15. #15
    Membre du Club
    Inscrit en
    Août 2012
    Messages
    9
    Détails du profil
    Informations forums :
    Inscription : Août 2012
    Messages : 9
    Par défaut
    ok ca marche !!!!

    voici le code pour passer de dash en bash !

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    chsh
    Enter the new value, or press return for the default
        Login Shell [/bin/bash]: /bin/bash
    merci pour vos infos eclairées !!! plus qu'a trouver ou est le bouton resolu maintenant

  16. #16
    Rédacteur

    Avatar de ok.Idriss
    Homme Profil pro
    IS Consultant
    Inscrit en
    Février 2009
    Messages
    5 220
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : IS Consultant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2009
    Messages : 5 220
    Par défaut
    J'aurais parié que c'était le dash bizarre de Debian

    EDIT :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    echo $SHELL
    /bin/bash
    Euh, t'es sûr de l'avoir fait en étant logué avec www-data ?

    Rappel :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    su - www-data
    echo $SHELL
    Il faut bien exécuter, à la suite, ces deux commandes (après authentification sous root en SSH).

  17. #17
    Membre du Club
    Inscrit en
    Août 2012
    Messages
    9
    Détails du profil
    Informations forums :
    Inscription : Août 2012
    Messages : 9
    Par défaut
    Heu non j'ai fais ça en root mais bon le principale après c'est que ça marche c'est plus ce dash qui exécute le code et du coup les chevrons le dérangent plus

    Nickel !!! Après je t'avoue j'y pige pas grand chose à tout ce charabia suis juste dev moi...

    En tout cas merci Idriss pour tes infos , ça m'a permis de voir ou c’était !!!

  18. #18
    Rédacteur

    Avatar de ok.Idriss
    Homme Profil pro
    IS Consultant
    Inscrit en
    Février 2009
    Messages
    5 220
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : IS Consultant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2009
    Messages : 5 220
    Par défaut
    Que les chevrons ne posent plus problème c'est une chose mais j'espère que tu n'a pas conservé cette commande en l'état alors que deux solutions meilleures t'ont été proposées (sachant que même le grep est à éviter dans ton cas) ...

    Rappel de base pour un développeur : éviter toutes commandes ou programmes externes à un langage de programmation dans la mesure du possible (ici c'est largement possible).

  19. #19
    Expert confirmé
    Homme Profil pro
    Développeur informatique en retraite
    Inscrit en
    Avril 2008
    Messages
    2 102
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côtes d'Armor (Bretagne)

    Informations professionnelles :
    Activité : Développeur informatique en retraite

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 102
    Par défaut
    Citation Envoyé par fred___ Voir le message
    salut jack

    Voici ce que je recup !

    coco=>debian6

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    root@coco:~# ps -ef | fgrep $$
    root      4310  3565  9 11:06 pts/1    00:00:00 -bash
    root      4375  4310  0 11:06 pts/1    00:00:00 ps -ef
    root      4376  4310  0 11:06 pts/1    00:00:00 fgrep 4310
    coco2 => plesk

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    coco2:~# ps -ef | fgrep $$
    root     24213 24190  0 11:09 pts/0    00:00:00 -bash
    root     24217 24213  0 11:09 pts/0    00:00:00 ps -ef
    root     24218 24213  0 11:09 pts/0    00:00:00 -bash
    Après ce que ça veut dire ...........
    ça veut dire que TON shell est un bash, mais ça ne répond pas à la question!
    J'ai précisé (mais peut-être pas suffisamment précisément) "lui faire exécuter"!
    Sous-entendu à PHP! Il fallait lui passer la commande "ps -ef" pour voir ce que dit le process lancé par PHP.
    Sinon, comme d'hab, le sh aliasé à dash, c'est pas cool...
    Bon, allez, c'est résolu...

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

Discussions similaires

  1. Requête POST dans un script bash
    Par desperado dans le forum Linux
    Réponses: 4
    Dernier message: 11/12/2007, 22h38
  2. Réponses: 21
    Dernier message: 29/09/2005, 19h33
  3. Script bash : Pb avec sed
    Par fred64 dans le forum Linux
    Réponses: 3
    Dernier message: 19/08/2005, 11h24
  4. Scripts bash : requêtes sql
    Par milka dans le forum Linux
    Réponses: 3
    Dernier message: 17/08/2005, 10h59
  5. Problème script Bash
    Par Sphost dans le forum Linux
    Réponses: 10
    Dernier message: 26/07/2005, 09h56

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