Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 21/06/2015, à 19:35

LePetitApprenti

[RESOLU] Executer un script

Bonjour,

Je fait mes début dans la programmation Shell, et ce n est pas du tout évident.

Si j'ai bien compris la variable PATH contient toutes les commandes que l interpréteur Shell sait reconnaître.
Et lorsque l on lance une commande dans un terminal alors l’interpréteur va chercher successivement dans les repertoires du PATH jusque ce qu'il trouve la dite commande.

Donc lorsque je fait un script, un fichier texte que j appelle MonPremierScript, qui contient une série de commande ( ls, cd .....)
MonPremierScript est considéré comme une commande dans le terminal, l’interpréteur va donc chercher dans les répertoires successifs du PATH cette commande.
L’interpréteur trouve le fichier MonPremierScript et tombe sur la première commande qui est par exemple ls.
L'interpreteur va de nouveau cherché dans PATH si il trouve cette commande et l’exécute.
Ensuite il retourne au fichier, MonPremierScript et recommence ainsi jusque ce que toutes les commandes soient bien exécutées.
L’exécution de cette série de commande nous donne lexécution de MonPremierScript.

Es ce que cela se passe bien comme ça ?

Maintenant ce que je ne comprends pas, pour rendre une commande permanent on nous dit,

"Cette procédure est pour une modification temporaire du PATH et qui sera donc effacée à la fin de la session. Pour rendre la modification permanente, ajouter la commande dans le fichier texte caché .bashrc se trouvant dans votre dossier personnel ainsi que dans le dossier /root. "

On nous parle de deux fichier .bashrc et /root c est a dire des trucs qui n'ont a priori rien a voir avec la variable PATH, la je n'y comprends plus rien, es ce que quelqu un a une explication ?
Ces fichier font exactement la même chose que PATH mais sont sauvegardés ?

J'ai un peu regarde le fichier .bashrc  et ce qui est sur c est qu il y a pas toutes les commandes que comprends le shell, le fichier est bien trop cour.
Le fichiers .bashrc ne fait donc pas la même chose que le repertoire PATH ou alors le repertoire .bashrc est juste un repertoire qui permet d'ajouter des commandes sans que les commandes de bases ne soient déjà pressentent.
Les commandes de bases que peux comprendre le Shell sont donc dans un autre repertoire es ce que c'est le repertoire bin ?
En regardant dans celui ci on peut effectivement voir des commandes en shell.
Je ne vais pas les commpter pour savoir si elles sont toutes la :P mais je pense que c'est le cas.

Dans le fichier .bashrc j'ai simplement rajouter le nom de la commande, c'est a dire le nom de mon fichier, MonPremierScript comme ci dessous,

# ~/.bashrc: executed by bash(1) for non-login shells.
# see /usr/share/doc/bash/examples/startup-files (in the package bash-doc)
# for examples

# If not running interactively, don't do anything
case $- in
    *i*) ;;
      *) return;;
esac

...............................

# enable programmable completion features (you don't need to enable
# this, if it's already enabled in /etc/bash.bashrc and /etc/profile
# sources /etc/bash.bashrc).
if ! shopt -oq posix; then
  if [ -f /usr/share/bash-completion/bash_completion ]; then
    . /usr/share/bash-completion/bash_completion
  elif [ -f /etc/bash_completion ]; then
    . /etc/bash_completion
  fi
fi

MonPremierScript

Es ce que c'est bien comme cela qu il faut faire ?

Je ne sais pas comment on fait pour modifier le fichier /root, lorsque j'essaye de rentrer dedans, j ai le message suivant,

pierro@Cocotte:/$ cd root
bash: cd: root: Permission non accordée

Je précise que j'ai modifier le fichier .bashrc de manière graphique n’étant pas encore familiarise avec les éditeurs de textes et la modification d’un fichier directement dans le terminal.
Pouvez vous m'aider ?

Dernière modification par LePetitApprenti (Le 04/07/2015, à 22:45)

Hors ligne

#2 Le 21/06/2015, à 19:44

f.x0

Re : [RESOLU] Executer un script

Bonjour LePetitApprenti,

pour modifier le fichier .bashrc dans le répertoire /root
essaies plutôt ceci :

sudo -i
cd /root
ls -la

et ensuite, une fois tes modifs effectuées,
SURTOUT N'OUBLIE PAS DE QUITTER LE MODE ADMINISTRATEUR

exit

Edit : modifié

Dernière modification par f.x0 (Le 21/06/2015, à 19:57)


SOPI

Hors ligne

#3 Le 21/06/2015, à 19:50

Watael

Re : [RESOLU] Executer un script

non ! pas sudo su !
à la rigueur sudo -su root, mais plutôt sudo -i.


Connected \o/
Welcome to sHell. · eval is evil.

En ligne

#4 Le 21/06/2015, à 20:02

f.x0

Re : [RESOLU] Executer un script

J'ai modifié,
mai pourquoi pas  sudo su ???
j'utilise toujours cette commande et je n'ai pas rencontré de souci.
Bon c'est vrai que c'est une déformation de Debian (su)
que j(utilise depuis le début... big_smile


SOPI

Hors ligne

#5 Le 21/06/2015, à 20:18

Watael

Re : [RESOLU] Executer un script

d'abord, c'est une "perversion" de la première commande que j'ai donnée : on dit sudo su en oubliant de préciser que s u sont des options de sudo, et avec le temps c'est devenu sudo su; mais,
et puis, c'est redondant : ce sont deux commandes qui permettent de passer root, quand une seule suffit.


Connected \o/
Welcome to sHell. · eval is evil.

En ligne

#6 Le 21/06/2015, à 21:58

melixgaro

Re : [RESOLU] Executer un script

salut,

à LePetitApprenti

Je te déconseille d'aller modifier ce qui se trouve sous le répertoire /root, du moins durant ta phase de découverte. D'autant que ça n'est probablement pas nécessaire pour ce que tu cherches à faire.

Le fichier .bashrc est exécuté lorsque tu ouvres un shell bash (par exemple, quand tu ouvres une console). Si tu écris

echo "hello apprenti !"

dans ton .bashrc, alors à chaque ouverture de la console, tu verras le message « hello apprenti ! »

Tu comprends ainsi qu'en écrivant

MonPremierScript

dans .bashrc, tu demandes l'exécution de ton programme. Si bash le trouve dans ton PATH, il l'exécute ; sinon, il renverra une erreur.

Si tu veux que ton programme « soit connu » du shell, il faut rajouter le chemin du dossier où se trouve ton programme dans la variable PATH. En supposant que ton programme se trouve dans /home/ton_nom/dossier, tu peux ajouter ceci dans ton .bashrc

export PATH=${PATH}:/home/ton_nom/dossier

Avec la ligne ci-dessus, tu assignes à la variable PATH son ancienne valeur ${PATH}, à la quelle tu concatènes le chemin vers ton programme.


[ce qui suit est faux, c'est à visée pédagogique]
Si tu fais simplement ceci

export PATH=/home/ton_nom/dossier

alors le shell ne trouvera plus aucun programme, à part ceux dans /home/ton_nom/dossier.
[fin du mauvais exemple]


Par curiosité, ouvre une console et tape

echo ${PATH}

tu verras quelque chose de ce genre

/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games

Ce sont tous les chemins dans lesquels le shell cherche un exécutable.

Dernière précision, pour que ce que je t'ai expliqué marche, il faut évidemment que MonPremierScript soit rendu exécutable. Ce que tu obtiens avec cette commande

chmod u+x MonPremierScript

Après avoir modifié le fichier .bashrc, pour que les modifications deviennent effectives, soit tu fermes la console et en ouvre une autre, soit tu tapes

.  ~/.bahsrc

(oui, ça commence par un « point » suivi d'un espace suivi du chemin vers .bashrc). Ça sert à recharger le .bashrc

Dernière modification par melixgaro (Le 21/06/2015, à 22:01)


Linux depuis ~2007. Xubuntu seulement.

Hors ligne

#7 Le 21/06/2015, à 22:21

f.x0

Re : [RESOLU] Executer un script

Pour les explications sur sudo et ses options
j'ai regardé ceci


SOPI

Hors ligne

#8 Le 21/06/2015, à 22:23

LePetitApprenti

Re : [RESOLU] Executer un script

Es ce que c est bon ce que j'ai fait, c'est a dire, rajouter simplement la commande MonPremierScript dans le fichier .bashrc de mon repertoire personnel ?
Il me suffit de refaire la mm chose dans le repertoire root et le tour est joué ?
J'ai modifié le contenu de mon repertoire personnel via l'interface graphique.
Je ne sais pas comment modifier le repertoire root sans passer par l'interface graphique.
Via la ligne de commande lorsque je deviens root via la commande,

sudo -i

Il mets pourtant toujours impossible de modifier le fichier .bashrc dans le repertoire root via la méthode graphique, j ai le message d'erreur, "Impossible d'afficher le contenu de cet emplacement".
Je crois que je vais devoir modifier le fichier via LCI, pas le choix cette ci.

Hors ligne

#9 Le 21/06/2015, à 22:32

f.x0

Re : [RESOLU] Executer un script

T'es bon pour utiliser nano


SOPI

Hors ligne

#10 Le 21/06/2015, à 22:43

melixgaro

Re : [RESOLU] Executer un script

à LePetitApprenti

dans le doute, as-tu vu mon message #6 ?


Linux depuis ~2007. Xubuntu seulement.

Hors ligne

#11 Le 22/06/2015, à 19:59

LePetitApprenti

Re : [RESOLU] Executer un script

Bonsoir melixgaro,

Oui j'ai vu ton message #6 et je te remercie pour toutes ces explications y compris le mauvais exemple, c'est top !!!
La j'y comprends enfin quelque chose dans les petites veines de ce système.

Pour rendre le script j'ai simplement fait la commande suivante,

chmod +x nom_du_script

Et non la commande

chmod u+x MonPremierScript

La différence, u comme user, peut être ce qui veux dire que il n y a que moi qui pourrai l’exécuter à tout hasard ?

J'arrive à exécuter le script donner dans la documentation sans problème.
Seul problème obliger d’être dans le répertoire courant.

pierro@Cocotte:~/Bureau$ bash MonPremierScriptBash
Mon premier script
Liste des fichiers :
total 40
drwxr-xr-x  2 pierro pierro  4096 juin  21 18:34 .
drwx------ 22 pierro pierro  4096 juin  22 20:32 ..
-rw-rw-r--  1 pierro pierro 10374 juin  21 13:33 Frais de transport 2014-2015.xlsx
-rwxrwxr-x  1 pierro pierro   269 juin  21 18:34 MonPremierScriptBash

Je sais j'ai tellement d'imagination que j'ai repris le script donne en exemple, c'est du tres haut niveau cool
Bon il ne me reste plus que à comprendre comment fonctionne Nano pour modifier le fichier bash.rc du dossier root et le tour est joué.
Pour l’éditeur de texte je commence par Nano puis ensuite tâte Vin ou bien je peux commencer à attaquer Vin direct  à votre avis ?

Hors ligne

#12 Le 22/06/2015, à 20:52

Maestitia

Re : [RESOLU] Executer un script

vi n'a pas de menus, pas d'interface graphique et n'est pas intuitif. Cela nécessite de connaître par cœur un certains nombre de raccourcis-claviers pour pouvoir l'utiliser.
Si l’apprentissage est un peu difficile, une fois maîtrisé vi se révèle rapide et pratique, au point qu'on va plus vite qu'avec des éditeurs de texte graphiques.

Le débat opposants les partisans de emacs (ou d'autre éditeurs) et ceux de vi n'a pas lieu d'être. Tout système Linux (et Unix) dispose quoiqu'il arrive de l'éditeur vi, le rendant incontournable.

L'éditeur vi sous Linux se nomme vim. Pour ma part, étant débutant, je roule principalement avec nano et gedit.


Apprenti linuxien

Hors ligne

#13 Le 22/06/2015, à 22:42

Rufus T. Firefly

Re : [RESOLU] Executer un script

Salut,

Je ne comprends pas très bien le but du jeu. Il n'y a pas besoin de bashrc pour exécuter un script.
Exemple :

#!/bin/bash
# superu:   Suis-je root ou non ?

ROOT_UID=0   # Root a l'identifiant $UID 0.

if [ "$UID" -eq "$ROOT_UID" ]  # Le vrai "root" peut-il se lever, s'il-vous-plaît ?
then
  echo "Vous êtes root."
else
  echo "Vous n'êtes qu'un utilisateur ordinaire (mais maman vous aime quand même)."
fi

exit 0

Tu copies ça dans un fichier texte que tu enregistres par exemple sous le nom de superu
Tu lui donnes le droit d'exécution :

chmod +x superu

Puis tu le lances par :

./superu

Je ne vois ce que la variable PATH vient faire ici. Tant que tu utilises des commandes standards dans ton script, c'est-à-dire toutes celles qui traînent à gauche et à droite sur ce forum, le système sait parfaitement où les trouver, précisément dans un des endroits déjà contenus dans PATH et où elles sont toutes rangées, sans exception.

D'autre part, si le problème est d'exécuter le script comme une nouvelle commande, c'est-à-dire de pouvoir l'appeler de n'importe où, on peut bien sûr modifier PATH pour que le système aille aussi chercher là où le script est enregistré, mais il vaut infiniment mieux déplacer le script dans un endroit que le système connaît (qui est déjà dans PATH) et qui est fait pour ça, en l'occurrence /usr/local/bin.

sudo mv ~/superu /usr/local/bin/

Et à partir de là tu disposes d'une nouvelle commande, superu, que tu peux appeler comme n'importe quelle autre commande.

superu

ou, pour avoir l'autre réponse :

sudo superu

Source du bout de code (superu) : la bible de bash

Dernière modification par Rufus T. Firefly (Le 22/06/2015, à 23:11)


La provocation est une façon de remettre la réalité sur ses pieds. (Bertolt Brecht)
Il n'y a pas de route royale pour la science et ceux-là seulement ont chance d'arriver à ses sommets lumineux qui ne craignent pas de se fatiguer à gravir ses sentiers escarpés. (Karl Marx)
Il est devenu plus facile de penser la fin du monde que la fin du capitalisme

Hors ligne

#14 Le 22/06/2015, à 23:57

Elder

Re : [RESOLU] Executer un script

+1

Tant que le script a :
- un shebang (la première ligne du script de Rufus qui commence par #!) qui indique l'interpreteur
- Que le script n'est pas lancé via une tache planifiée cron (là il faudra définir une variable PATH

@+
Elder

Hors ligne

#15 Le 29/06/2015, à 21:29

LePetitApprenti

Re : [RESOLU] Executer un script

Pour répondre à ta question Rufus oui je voulais juste créer un nouvelle commande et que cette commande sois reconnu par l’interpréteur Shell peux importe le repertoire ou je me trouve.
Si je place cette commande dans le repertoire indiquer,c'est a dire

/usr/local/bin/

détail ci dessous,

pierro@Cocotte:/bin$ ls
bash                  fgconsole   nc                       setfacl
bunzip2               fgrep       nc.openbsd               setfont
busybox               findmnt     netcat                   setupcon
bzcat                 fuser       netstat                  sh
bzcmp                 fusermount  nisdomainname            sh.distrib
bzdiff                getfacl     ntfs-3g                  sleep
bzegrep               grep        ntfs-3g.probe            ss
bzexe                 gunzip      ntfs-3g.secaudit         static-sh
bzfgrep               gzexe       ntfs-3g.usermap          stty
bzgrep                gzip        ntfscat                  su
bzip2                 hostname    ntfsck                   sync
bzip2recover          ip          ntfscluster              tailf
bzless                kbd_mode    ntfscmp                  tar
bzmore                keyctl      ntfsdump_logfile         tempfile
cat                   kill        ntfsfix                  touch
chacl                 kmod        ntfsinfo                 true
chgrp                 less        ntfsls                   udevadm
chmod                 lessecho    ntfsmftalloc             ulockmgr_server
chown                 lessfile    ntfsmove                 umount
chvt                  lesskey     ntfstruncate             uname
cp                    lesspipe    ntfswipe                 uncompress
cpio                  ln          open                     unicode_start
dash                  loadkeys    openvt                   vdir
date                  login       pidof                    vmmouse_detect
dbus-cleanup-sockets  loginctl    ping                     which
dbus-daemon           lowntfs-3g  ping6                    whiptail
dbus-uuidgen          ls          plymouth                 ypdomainname
dd                    lsblk       plymouth-upstart-bridge  zcat
df                    lsmod       ps                       zcmp
dir                   mkdir       pwd                      zdiff
dmesg                 mknod       rbash                    zegrep
dnsdomainname         mktemp      readlink                 zfgrep
domainname            more        red                      zforce
dumpkeys              mount       rm                       zgrep
echo                  mountpoint  rmdir                    zless
ed                    mt          rnano                    zmore
efibootmgr            mt-gnu      running-in-container     znew
egrep                 mv          run-parts
false                 nano        sed

Alors dans ce cas "tout le monde" pourra exécuter la commande sauf si je place une condition sur le UID ou GUID dans le script lui même comme tu nous a montré dans l exemple.

Mais si je souhaite que cette commande sois propre à un utilisateur sans mettre de condition dans le script lui mm, alors je dois bien l'ajouter au repertoire bash.rc  ?
Au final c est deux manières différentes de faire mais qui arrive au même résultat.

f .x0 je me suis mis à l éditeur Vim et j'apprends tranquillement via VimTutor dans un premier temps.

Merci de m'apporter vos précisions et l'exemple.

Hors ligne

#16 Le 29/06/2015, à 21:56

Rufus T. Firefly

Re : [RESOLU] Executer un script

Ce n'est pas dans /bin qu'il faut le mettre, - pour éviter le souk dans ton système -, mais dans /usr/local/bin qui est destiné à ça.

Quant à .bashrc, c'est le fichier de configuration du terminal (et ce n'est pas un répertoire). Donc tout ce qu'il y a dedans est exécuté lors du démarrage du terminal. Un script qui n'a rien à voir avec la configuration du terminal n'a rien à y faire...
Les scripts bash ne sont que des fichiers texte, qui ont cette gueule-là :

#!/bin/bash
... les opérations que fait le script
exit 0

Quand c'est enregistré, tu le rends exécutable et tu le lances, dans le terminal, par :

./script

Dernière modification par Rufus T. Firefly (Le 29/06/2015, à 21:56)


La provocation est une façon de remettre la réalité sur ses pieds. (Bertolt Brecht)
Il n'y a pas de route royale pour la science et ceux-là seulement ont chance d'arriver à ses sommets lumineux qui ne craignent pas de se fatiguer à gravir ses sentiers escarpés. (Karl Marx)
Il est devenu plus facile de penser la fin du monde que la fin du capitalisme

Hors ligne

#17 Le 04/07/2015, à 22:42

LePetitApprenti

Re : [RESOLU] Executer un script

Bonsoir,

Dsl de répondre si tard mais comme dit le dicton,

veux mieux tard que jamais.

Je me suis mis à l'éditeur de Vim et mes débuts sont relativement difficile mais  bonne nouvelle ça ne peux que s'améliorer big_smile

Rufus ca marche impec ce que tu m'as dis.

J'ai ma première nouvelle commande, du nom MonPremierScript, et d'autres suivront sûrement.

Juste une précision pour le lancer dans le terminal je n'ai mm pas besoins de faire ./NomNouvelleCommande mais juste dans le terminal le nom de la commande, comme ci dessous:

pierro@Cocotte:/$ MonPremierScript 
Mon premier script
Liste des fichiers :
total 116
drwxr-xr-x  24 root root  4096 juil.  1 22:29 .
drwxr-xr-x  24 root root  4096 juil.  1 22:29 ..
drwxr-xr-x   2 root root  4096 juin  16 22:32 bin
drwxr-xr-x   4 root root  4096 juin  21 13:42 boot
drwxrwxr-x   2 root root  4096 mai   21 00:04 cdrom
drwxr-xr-x  16 root root  4320 juil.  4 12:36 dev
drwxr-xr-x 136 root root 12288 juil.  4 12:37 etc
drwxr-xr-x   5 root root  4096 mai   21 00:08 home
lrwxrwxrwx   1 root root    33 juin  16 22:32 initrd.img -> boot/initrd.img-3.13.0-55-generic
lrwxrwxrwx   1 root root    33 juin  10 22:28 initrd.img.old -> boot/initrd.img-3.13.0-54-generic
drwxr-xr-x  26 root root  4096 mai   28 23:39 lib
drwxr-xr-x   2 root root  4096 mai   25 02:33 lib32
drwxr-xr-x   2 root root  4096 mai   21 01:28 lib64
drwx------   2 root root 16384 mai   21 00:00 lost+found
drwxr-xr-x   3 root root  4096 mai   24 14:26 media
drwxr-xr-x   2 root root  4096 avril 11  2014 mnt
drwxr-xr-x   2 root root  4096 juil. 22  2014 opt
dr-xr-xr-x 239 root root     0 juil.  4 12:36 proc
drwx------   7 root root  4096 juin  21 23:02 root
drwxr-xr-x  23 root root   760 juil.  4 12:43 run
drwxr-xr-x   2 root root 12288 juin  25 20:47 sbin
drwxr-xr-x   2 root root  4096 juil. 22  2014 srv
dr-xr-xr-x  13 root root     0 juil.  4 12:36 sys
drwxrwxrwt   4 root root 12288 juil.  4 23:17 tmp
drwxr-xr-x  11 root root  4096 mai   25 02:33 usr
drwxr-xr-x  13 root root  4096 juil. 23  2014 var
lrwxrwxrwx   1 root root    30 juin  16 22:32 vmlinuz -> boot/vmlinuz-3.13.0-55-generic
lrwxrwxrwx   1 root root    30 juin  10 22:28 vmlinuz.old -> boot/vmlinuz-3.13.0-54-generic

Et en plus lorsque je rentre la commande l'auto-complétion fonctionne, elle est pas belle la vie cool

Merci pour votre aide !!!!

Hors ligne

#18 Le 04/07/2015, à 22:49

Rufus T. Firefly

Re : [RESOLU] Executer un script

Attention ! Ça ne devrait pas fonctionner. Tu as peut-être encore un truc comme ça, qui traîne dans .bashrc

export PATH=${PATH}:/home/ton_nom/dossier

Pour vérifier :

cd /tmp
MonPremierScript

Comme je l'ai déjà expliqué plus haut, modifier le PATH est une mauvaise idée... Il vaut mieux virer ça et déplacer ton script dans /usr/local/bin

Dernière modification par Rufus T. Firefly (Le 04/07/2015, à 22:52)


La provocation est une façon de remettre la réalité sur ses pieds. (Bertolt Brecht)
Il n'y a pas de route royale pour la science et ceux-là seulement ont chance d'arriver à ses sommets lumineux qui ne craignent pas de se fatiguer à gravir ses sentiers escarpés. (Karl Marx)
Il est devenu plus facile de penser la fin du monde que la fin du capitalisme

Hors ligne