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 aurel (site web personnel, Mastodon) . Évalué à 3.
[^] # Re: #!/bin/bash
Posté par malte . Évalué à 1.
Je veux juste savoir comment on peut l'exécuter en tapant simplement
./nom_script.sh
[^] # Re: #!/bin/bash
Posté par Gyro Gearllose . Évalué à 2.
Si tu veux lancer ton script en faisant ./nom_script.sh, ton fichier dois commencer par :
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 malte . Évalué à 1.
J'ai déjà cette ligne dans mon fichier exécutable :
#!/bin/bash
clear
echo "Test"
echo
[^] # Re: #!/bin/bash
Posté par Gyro Gearllose . Évalué à 2.
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 malte . Évalué à 1.
bash is /bin/bash
:-)
[^] # Re: #!/bin/bash
Posté par Gyro Gearllose . Évalué à 2.
Si je récapitule, tu as un script dont le contenu ressemble peu ou prou à ceci :
Tu l'as édité avec vi, emacs peu importe, mais il est bien au format unix ?
Au pire aller, tu peux essayer ça :
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 malte . Évalué à 1.
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 bad sheep (site web personnel) . Évalué à 2.
/bin/bash test.sh
?
[^] # Re: #!/bin/bash
Posté par malte . Évalué à 1.
sh test.sh
[^] # Re: #!/bin/bash
Posté par bad sheep (site web personnel) . Évalué à 2.
[^] # Re: #!/bin/bash
Posté par Gyro Gearllose . Évalué à 2.
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 malte . Évalué à 1.
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 Amand Tihon (site web personnel) . Évalué à 3.
[^] # Re: #!/bin/bash
Posté par malte . Évalué à 1.
[^] # Re: #!/bin/bash
Posté par Calim' Héros (site web personnel) . Évalué à 2.
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 malte . Évalué à 1.
# pour le prompt...
Posté par Fab . Évalué à 3.
[^] # Re: pour le prompt...
Posté par malte . Évalué à 1.
[^] # Re: pour le prompt...
Posté par gaaaaaAab . Évalué à 1.
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 B16F4RV4RD1N . Évalué à 2.
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 malte . Évalué à 2.
[ -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 malte . Évalué à 2.
"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.