Forum Linux.débutant bash_profile et autres...

Posté par  .
Étiquettes : aucune
0
28
sept.
2006
Bonjour,

Linux est un univers entièrement neuf pour moi.
J'ai un petit espace réservé sur un serveur(Red Hat 7), où j'accède via Putty,
et je m'essaye à divers petits scripts bash dans mon répertoire utilisateur.

1ere contrariété : je n'arrive rien à faire dans mon fichier .bash_profile.
J'ai lu plein de choses sur le sujet, peut-être trop car je ne sais plus
où j'en suis, entre .bash_profile et .bashrc

Quoique je mette dans ces fichiers, ce n'est pas pris en compte, sauf peut-être
le PATH, mais les alias eux ne fonctionnent jamais par exemple

1) Changer l'invite, qui se présente comme ça actuellement :
bash-2.05$

par
PS1='\[\u@\h \W \$ >\]'

Quand je mets ça dans bash_profile, l'invite est bien changée, mais le
curseur pe place au début de l'invite... Et quand je tape, ça efface le prompt
au fur et à mesure...



2) Pour lancer un exécutable, je fais :
sh test.sh


Quand je veux faire simplement
./test.sh

j'ai le résultat :
bash: ./test.sh: bad interpreter: Permission denied

Que faut-il pour que cette syntaxe soit acceptée ?

Merci.
  • # #!/bin/bash

    Posté par  . Évalué à 3.

    Tu peux mettre "#!/bin/bash" en guise de première ligne de ton script, et faire un "chmod +x monscript" afin de le rendre executable.
    • [^] # Re: #!/bin/bash

      Posté par  . Évalué à 1.

      Mais il est déjà exécutable, ça je le sais faire :)
      Je veux juste savoir comment on peut l'exécuter en tapant simplement
      ./nom_script.sh
      • [^] # Re: #!/bin/bash

        Posté par  . Évalué à 2.

        As-tu lu et compris la réponse apportée par aurel ?
        Si tu veux lancer ton script en faisant ./nom_script.sh, ton fichier dois commencer par :

        #!/bin/bash

        Tant qu'il n'y aura pas cet appel à un shell (d'ailleurs, tu peux remplacer bash par sh, ksh, zsh ou autres, selon le script lui même, selon les spécificités propres à chaque shell utilisées dans ton script), ton script aura beau avoir le droit d'exécution, il ne pourra pas être lancé comme tu souhaites le faire.
        Voilà, en espérant que ça aide.
        • [^] # Re: #!/bin/bash

          Posté par  . Évalué à 1.

          J'insiste :)
          J'ai déjà cette ligne dans mon fichier exécutable :


          #!/bin/bash

          clear
          echo "Test"
          echo
          • [^] # Re: #!/bin/bash

            Posté par  . Évalué à 2.

            Ah, bah déjà, avec un peu de code, on en sait un peu plus !
            Ceci-dit, tu as raison d'insister.
            bash est-il bien situé dans /bin alors ?
            Tu peux probablement t'en assurer en tapant au prompt :
            $ type bash

            Si ça répond :
            bash is /bin/bash
            c'est simple : je jette l'éponge, car ça dépasse mes compétences.
            Sinon, si ça répond par exemple :
            bash is /usr/local/bash
            Alors, il faut changer la première ligne de ton script en conséquence. Voilà, j'espère _vraiment_ que cette aide te sera utile !
            • [^] # Re: #!/bin/bash

              Posté par  . Évalué à 1.

              Ça me répond :
              bash is /bin/bash
              :-)
              • [^] # Re: #!/bin/bash

                Posté par  . Évalué à 2.

                Ben non, c'est pas drôle....
                Si je récapitule, tu as un script dont le contenu ressemble peu ou prou à ceci :

                #!/bin/bash
                echo Plop

                Tu l'as édité avec vi, emacs peu importe, mais il est bien au format unix ?
                Au pire aller, tu peux essayer ça :

                cat > test.sh <<EOF
                #!/bin/bash
                echo Plop
                EOF

                Ensuite, tu changes les droits sur ce fichier :
                $ chmod u+x test.sh
                Et quand tu tapes :
                $ ./test.sh
                Ca te répond :
                bash: ./test.sh: bad interpreter: Permission denied

                J'y perds mon latin^Wshell...
                • [^] # Re: #!/bin/bash

                  Posté par  . Évalué à 1.

                  Merci de ton coup de main.

                  Oui, le fichier est bien au format Unix. Et la réponse est bien

                  $ ./test.sh

                  bash: ./test.sh: bad interpreter: Permission denied
                  • [^] # Re: #!/bin/bash

                    Posté par  (site web personnel) . Évalué à 2.

                    que donne la ligne

                    /bin/bash test.sh

                    ?
                    • [^] # Re: #!/bin/bash

                      Posté par  . Évalué à 1.

                      Elle exécute le script, comme si j'avais fait
                      sh test.sh
                      • [^] # Re: #!/bin/bash

                        Posté par  (site web personnel) . Évalué à 2.

                        Possibilité: le répertoire dans lequel tu te trouves est monté avec l'option noexec ... vérifie dans /etc/fstab que ta partition ne contient pas cette option de montage... auquel cas il suffit de la supprimer pour que tout fonctionne.
                  • [^] # Re: #!/bin/bash

                    Posté par  . Évalué à 2.

                    De rien, c'est un peu le but des forums, non ?
                    As-tu le droit d'exécuter bash alors ?
                    Pour t'en assurer, tu peux faire au choix :
                    $ ls -l /bin/bash
                    Chez moi, ça donne ça :
                    -rwxr-xr-x 1 root root 573241 2006-04-25 09:26 /bin/bash

                    Ou encore :
                    $ /bin/bash


                    Ou encore :
                    $ ps
                    Chez moi, dans une console toute neuve, j'obtiens :
                    PID TTY TIME CMD
                    10216 pts/2 00:00:00 bash
                    10246 pts/2 00:00:00 ps

                    Peu importe laquelle tu utilises, mais peut-être que tu n'as tout simplement pas le droit d'exécuter ou bash, ou des scripts shells, ou les deux. On doit pouvoir interdire ça d'une façon ou d'une autre.
                    As-tu la main sur le serveur en tant qu'administrateur ou pas ?
                    Si ce n'est pas le cas, demande à l'administrateur (si tu peux), il sera probablement d'un meilleur secours que moi...
                    • [^] # Re: #!/bin/bash

                      Posté par  . Évalué à 1.

                      ls -l /bin/bash
                      donne la même chose que toi

                      ps aussi

                      PID TTY TIME CMD
                      15846 pts/0 00:00:00 bash
                      4627 pts/0 00:00:00 ps


                      Pourtant des scripts j'en exécute déjà, rien que quand je lance mon test.sh, non ?

                      Et j'en ai fait d'autres, tous s'exécutent normalement., sauf que je ne comprends pas pourquoi dans tous les tutoriaux, on dit que ça peut s'exécuter en tapant juste ./monscript
                      :)
                      Bon, c'est pas dramatique non plus...

                      Oui, je peux avoir un accès en tant que root
                      • [^] # Re: #!/bin/bash

                        Posté par  (site web personnel) . Évalué à 3.

                        Peut-être que la partition où se trouve le script est montée avec l'option noexec ?
                        • [^] # Re: #!/bin/bash

                          Posté par  . Évalué à 1.

                          Alors là, pas la moindre idée, il s'agit d'un serveur dédié, chez OVH, je ne connais rien à tout ça.
                          • [^] # Re: #!/bin/bash

                            Posté par  (site web personnel) . Évalué à 2.

                            cat /etc/mtab

                            Et la si tu vois noexec sur la ligne de ta partition c'est que la partition est monté en noexec
                            • [^] # Re: #!/bin/bash

                              Posté par  . Évalué à 1.

                              Bah, non, aucun " noexec " après exécution de cette commande.
  • # pour le prompt...

    Posté par  . Évalué à 3.

    http://www-128.ibm.com/developerworks/linux/library/l-tip-pr(...)
    \[	This sequence should appear before a sequence of characters that don't move the cursor
    (like color escape sequences). This allows bash to calculate word wrapping correctly.
    \]	This sequence should appear after a sequence of non-printing characters.
    
    J'ai ceci dans mon .bashrc :
    CRESET="\[\e[0;0m\]"
    CRESET_BOLD="\[\e[0;1m\]"
    BLUE="\[\e[0;34m\]"
    LBLUE="\[\e[1;34m\]"
    RED="\[\e[0;31m\]"
    LRED="\[\e[1;31m\]"
    MAGENTA="\[\e[0;35m\]"
    LMAGENTA="\[\e[1;35m\]"
    CYAN="\[\e[0;36m\]"
    LCYAN="\[\e[1;36m\]"
    GREEN="\[\e[0;32m\]"
    LGREEN="\[\e[1;32m\]"
    YELLOW="\[\e[1;33m\]"
    ORANGE="\[\e[0;33m\]"
    GREY="\[\e[0;37m\]"
    
    PS1="\n${CRESET_BOLD}<${LRED}\u${ORANGE}@${YELLOW}\h${CRESET_BOLD}> ${LGREEN}\W${CRESET} \$ "
    
    
    • [^] # Re: pour le prompt...

      Posté par  . Évalué à 1.

      Ok merci, mais j'ai copié-collé exactement çton code dans un .bashrc, ça me renvoie "command not found"
      • [^] # Re: pour le prompt...

        Posté par  . Évalué à 1.

        ton fichier n'aurait-il pas des fins de lignes au format windows ?

        pour vérifier ça, tu l'ouvres avec vim. Si ton fichier est au format dos,
        dans la ligne de status, tu auras
        "test.sh" [dos] ...

        Si c'est le cas, tu peux facilement le convertir au format unix, en faisant (toujours sous vim) :

        :set ff=unix
        :x


        ou en utilisant dos2unix
  • # .profile

    Posté par  . Évalué à 2.

    essaye plutôt de faire cela :

    dans .bashrc

    copie quelque chose de ce genre :


    [ -f /etc/profile ] && . /etc/profile && . ~/.profile


    (sous debian il propose egalement la ligne :

    # /etc/bash.bashrc

    et met ce que tu as besoin dans ton .profile :

    (voici le mien, il y a des essais dedans... mais adapte le)


    export PATH="$HOME/.dist/bin:/usr/include/SDL/:/usr/local/bin:/usr/include:/usr/sbin:/sbin:/usr/share/jre1.5.0_01/lib/:/usr/share/jre1.5.0_01/bin/:$PATH:"
    export LANG=fr_FR@euro

    #PS1='\[\033[0;33m\][\t]\[\033[0;32m\]\[\033[0;36m\]\w\$\[\033[0m\] \a'

    #PROMPT=$'%{\e[0;36m%}[%t] %{\e[0;31m%}%n %{\e[0;32m%}%~$%{\e[0m%} '

    #PROMPT=$'%{\e[0;36m%}[%t] %{\e[0;32m%}%~$%{\e[0m%} '

    alias ..="cd .."
    alias which="type -path"
    alias where="type -all"
    alias ll="ls -l --color=auto"
    alias l="ls -a --color=auto"
    alias rm="rm -i"
    alias mv="mv -i"
    alias cp="cp -i"
    alias la="ls -la --color=auto"
    alias ls="ls --color=auto"
    alias trouve="find ./ -type f | xargs grep -l "



    attention, cela contient également des raccourcis pour d'autres shell je crois (mais je ne les utilise pas)

    Only wimps use tape backup: real men just upload their important stuff on megaupload, and let the rest of the world ~~mirror~~ link to it

    • [^] # Re: .profile

      Posté par  . Évalué à 2.

      Ok, merci, ça marche avec cette simple ligne dans mon bashrc

      [ -f /etc/profile ] && . /etc/profile && . ~/.profile

      J'ai du mal à la comprendre par contre.

      [ -f /etc/profile ] = si le fichier profile existe dans etc ?

      et ensuite, que veut dire le && ?


      D'autre part, mon fichier était en [dos]
      Je l'ai rectifié, merci gaaaaaAab
      • [^] # Re: .profile

        Posté par  . Évalué à 2.

        Ah, je pense avoir trouvé :
        "Chaque commande s'exécute à son tour à condition que la dernière commande ait renvoyé un code de retour true (zéro)."

        Je viens du monde Javascript et PHP, et je suis un peu dérouté par ces syntaxes

Suivre le flux des commentaires

Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.