[résolu]Commande qui mene directement vers un répertoire donné

Commande qui mene directement vers un répertoire donné [résolu] - Shell/Batch - Programmation

Marsh Posté le 17-05-2010 à 17:12:46    

Bonjour,
 
J'ai une question à laquelle l'ami google n'a aucune reponse.
 
Je bosse sur un site, dont les path sont assez long, j'ai créé un script shell dans mon rep perso contenant ceci
goimg:

Code :
  1. #!/bin/bash
  2. cd /chemin/absolu/vers/mon/repertoire


 
Pour changer de repertoire je fais donc:
$ . ~/goimg
 
Je voudrais que ça marche sans avoir à mettre le point avant l'appel du script.
 
Merci :)


Message édité par shadok_lulz le 20-05-2010 à 10:02:45
Reply

Marsh Posté le 17-05-2010 à 17:12:46   

Reply

Marsh Posté le 17-05-2010 à 17:30:21    

Il faudrait alors mettre le point dans la variable d'environnement PATH dans le fichier .profile ou autre.
Par exemple :

PATH=.:/bin:/usr/lib


 
Edit : J'ai lu trop vite, et je n'ai pas vu l'espace derrière le point, donc ma solution n'est sans doute pas la bonne.


Message édité par olivthill le 17-05-2010 à 17:32:43
Reply

Marsh Posté le 18-05-2010 à 00:14:26    

pour ce qui est du ".", tu es obligé de le mettre.
 
En effet

~/goimg

lance un sous-process (process fils) de type bash (grace au shebang, la première ligne du script), mais ISOLE : aucune modification du fils n'affectera le père (variable d'envir, changement de directory, ...)
 
Le "PATH" ne change rien à l'affaire, il ne sert qu'a chercher des executables (en fait, quand tu fais "cd xxx", tu fais en fait "/bin/cd xxx" grâce au fait que le path il y a "/bin" ).
 
Donc au mieux dans le PATH tu peux y mettre $HOME, mais ça ne marchera pas pour ". [fichier]" pour lequel la chaine "fichier" doit contenir le chemin
 
Le seul moyen est le "sourcing" ou "l'import" execute le code contenu dans le fichier indiqué dans le shell courant AVEC le shell courant (ksh si shell ksh, bash avec bash).  
 
C'est ce qui permet de changer le repertoire dans ton process courant (celui qui te permet d'executer des commandes)
 
Il est d'ailleurs dangereux de mixer car, si certaines syntaxes sont compatibles, d'autres ne le sont absoluement pas et donc dans un ksh faire un sourcing d'un fichier contenant du code "bash" (le shebang est ignoré) va parfois fonctionner (script "simple" ) mais souvent planter (bad substitution, ...).
 
Pour ton problème (si le . est vraiment rédhibitoire), il y a d'autres solutions :
- variables d'envir (dans le  ~/.profile faire un export CHEMIN=/chemin/absolu/vers/mon/repertoire) puis "cd $CHEMIN" après un . ~/.profile (ou logout/login)
- liens symboliques :

ln -s /chemin/absolu/vers/mon/repertoire ~/ln_simple
cd ~/ln_simple


 
Bon Courage, en espérant que ça aide (et que je n'ai pas oublié de solutions)


Message édité par dreameddeath le 18-05-2010 à 00:16:36
Reply

Marsh Posté le 18-05-2010 à 21:58:13    

Le PATH c'est le chemin de recherche des répertoires de commandes, et le ~ c'est le répertoire d'accueil relatif à chaque user qui exécute le script.
Si tu écris un script destiné à être exécuté par un user "système" qui n'a pas de PATH et de ~ , tu es obligé de définir un PATH ou de rentrer (presque) tous les chemins complets des commandes (il y a quelques commandes de base intégrées, dont cd) ou les définir dans des variables en début de script.

Reply

Marsh Posté le 19-05-2010 à 13:51:53    

et un alias tout simplement dans le .bashrc ?  :??:
 
EDIT : genre : alias goimg='cd /chemin/absolu/vers/mon/repertoire'


Message édité par slywalker le 19-05-2010 à 13:53:58
Reply

Marsh Posté le 20-05-2010 à 09:57:42    

Merci =), y'a un service à redemarrer ? (c'est un serveur de prod, donc un reboot, bof...)

Reply

Marsh Posté le 20-05-2010 à 10:01:18    

logout tout bettement
Merci =) c'est exactement ce que je cherchais !

Reply

Marsh Posté le 20-05-2010 à 10:03:53    

alias l='ls -la' est aussi fort appréciable.

Reply

Marsh Posté le 20-05-2010 à 14:19:24    

ben de rien  ;)

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed