Bonjour,
Je ne comprends pas pourquoi j'ai lerreur:
et comment faire pour y remédier?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 man cd Aucune entrée de manuel pour cd .
Merci d'avance.
Bonjour,
Je ne comprends pas pourquoi j'ai lerreur:
et comment faire pour y remédier?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 man cd Aucune entrée de manuel pour cd .
Merci d'avance.
C'est surtout une conséquence du fait que Gnu ne fournit pas de binaire indépendant pour la commande cd, comme par exemple /usr/bin/cd, l'une des raisons pour lesquelles les systèmes basés sur Gnu/Linux ne sont pas conformes aux standard POSIX.
au pire elle est assez facile à écrire
s'inspirer de celle là trouvé sur google :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66 #include <errno.h> #include <fcntl.h> #include <stdio.h> #include <stdlib.h> #include <unistd.h> #include <sys/stat.h> void affiche_chemin_courant(void) { char * chemin = NULL; char * nouveau = NULL; int taille= 16; while(1) { if ((nouveau = realloc(chemin,taille))== NULL) { perror("realloc"); } chemin = nouveau; if (getcwd(chemin,taille) != NULL) { fprintf(stdout, "%s\n" , chemin); break; } if (errno != ERANGE) { perror("getcwd"); break; } taille *= 2; } if (chemin != NULL) free(chemin); } void change_chemin_courant(char *nom) { int fd; if ((fd = open(nom, O_RDONLY)) <0) { perror(nom); return; } if (fchdir(fd) <0) perror(nom); close(fd); } int main(int argc , char **argv) { int i; //affiche_chemin_courant(); for (i = 0;i < argc; i++) { change_chemin_courant(argv[i]); affiche_chemin_courant(); } return EXIT_SUCCESS; } //Execution //cd /usr/local/bin // ./cd /etc/ /usr/X11R6/include/X11/bitmaps/ /etc/inittab //=> // /usr/local/bin //![]()
C'est plutôt la page de manuel qu'il faudrait écrire pour répondre à la question posée.
Quant à l'implémentation, il y a plus simple:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 #!/bin/sh cd "$@"![]()
La commande cd est obligatoirement une commande interne car il ne s'agit que de positionner les différentes variables tel que pwd, cwd, etc...
Par exemple sous Solaris, la commande cd existe bien dans /usr/bin mais celle-ci n'est autre qu'un script qui appelle la builtin du shell.
Je suis très d'accord mais pour une autre raison.
Dans un shell, à chaque fois que l'on lance une commande, on fork/exec un nouveau process fils qui exécute cette commande.
Si la commande "cd" était externe, c'est le fils qui changerait de répertoire, pas le parent (le shell). Quand on fait "cd", c'est bien pour que le shell change de répertoire.
Raymond
Vous souhaitez participer à la rubrique Réseaux ? Contactez-moi
CafuroCafuro est un outil SNMP dont le but est d'aider les administrateurs système et réseau à configurer leurs équipements SNMP réseau.
e-verbeUn logiciel de conjugaison des verbes de la langue française.
Ma page personnelle sur DVP.
Il s'agit surtout d'appeler la fonction système chdir.
Ce n'est pas la seule commande dans ce cas, et rien n'interdit d'implémenter une commande comme ça.Par exemple sous Solaris, la commande cd existe bien dans /usr/bin mais celle-ci n'est autre qu'un script qui appelle la builtin du shell.
C'est d'ailleurs précisément à quoi je faisait allusion dans mon dernier post.
Partager