2010-06-19 7 views
1

J'écris mon propre programme shell. Je suis actuellement en train d'implémenter la commande cd en utilisant chdir. Je veux mettre en œuvre le chdir avec les options ci-dessous:implémentation de la commande cd en utilisant chdir() dans linux

-P Ne pas suivre les liens symboliques
-L Suivre les liens symboliques (par défaut)

Je posté un question here previously asking to know if a path is a symbolic link or actual path. Mais avec cette information, je suis incapable d'obtenir des idées sur la façon de procéder avec le problème ci-dessus.

Merci

+2

Avez-vous un bon cas d'utilisation pour cette fonctionnalité? Je ne pense pas que n'importe quel shell existant le fasse, et je pense que tous les utilisateurs le demandent, mais peut-être le sont-ils. Il semble juste que la complexité d'unix arcane sans beaucoup d'avantages pour l'utilisateur final. Lorsqu'un utilisateur final se soucie de savoir si un répertoire est ou n'est pas un lien symbolique, le lien symbolique "feature" échoue. Les utilisateurs finaux ne devraient pas s'en soucier. Bien que je puisse voir des cas d'utilisation plus valides pour les utilitaires de parcours de fichiers récursifs comme tar et scp ayant des options autour de ne pas suivre les liens symboliques, pour un shell interactif faisant un cd, la valeur n'est pas évidente. Juste curieux. –

+0

Bash fournit 'cd -P' et' cd -L' (et par défaut 'cd -L'). Quand vous avez fait 'cd -P',' cd ..' vous emmène dans la hiérarchie physique du système de fichiers même si vous avez suivi un lien symbolique pour vous y rendre, mais si vous avez fait un 'cd -L' pour obtenir vous là, alors 'cd ..' coupe un élément du nom du lien symbolique pour vous faire monter d'un niveau. –

Répondre

0

Peut-être que je suis malentendu, mais vous voulez juste(): pseudocode

is_symlink = method_from_other_question(); 
if(is_symlink and arg(-P)) 
    fail("Can't switch directory -- is a symlink"); 

Si vous avez déjà essayé quelque chose comme ça et il ne fonctionne pas, notamment le code votre question et nous pouvons aider à la déboguer

0

Les coquilles font généralement beaucoup de ruse pour trouver le vrai nom de dir. Et ils simulent aussi beaucoup de choses pour la commodité de notre utilisateur. E.g .:

$ pwd 
/home/auser 
$ ls -l 
adir -> some/place/ 
some/ 
$ cd adir 
$ pwd 
/home/auser/adir 
$ cd .. 
$ pwd 
/home/auser 

Regard logique? Ensuite, regardez à nouveau: le .. en /home/auser/some/place points à /home/auser/some, pas /home/auser encore cd .. vous a conduit à la plus tardive. IOW, il n'y a pas d'autre moyen que de toujours garder en mémoire le chemin absolu du répertoire courant et de l'analyser complètement (et de vérifier chaque élément) en faisant cd.

Et oui, ce n'est pas fiable. Dans le passé, j'ai réussi à tromper bash et il montrait complètement faux chemin absolu pour mon répertoire actuel.

Questions connexes