11
votes

Pourquoi Mkdir ne fonctionne pas avec tilde (~)?

Lorsque j'écris xxx

sous Linux, il n'a pas réussi à créer un répertoire. Si je remplace le ~ avec le répertoire personnel développé, cela fonctionne bien. Quel est le problème avec l'utilisation de ~ ?

merci


0 commentaires

3 Réponses :


5
votes

~ est généralement étendu par la coque. Ne pas utiliser le shell signifie que vous êtes responsable de l'expansion à la place.


0 commentaires

12
votes

~ est un caractère de méta shell, pas un "raccourci" fourni au noyau.

Voir le Wordexp (3) ou < un href = "http://linux.die.net/man/3/glob" rel = "nofollow noreferrer"> glob (3) pages de l'homme si vous souhaitez supporter < Code> ~ facilement. (Ils peuvent faire beaucoup plus que vous le souhaitez.)


2 commentaires

(Merci à O11C pour l'entrée GLOB (3) ; il ne fait pas ~ mais est toujours utile.)


Oui, voici, voir glob_tilde (et glob_tilde_check ) dans cette page.



31
votes

~ est connu uniquement sur la coque et non à l'appel système mkdir .

Mais si vous essayez: xxx

ceci fonctionne comme le "mkdir ~ / foo" est transmis à une coque et à une coque expandes ~ à $ home

si vous souhaitez utiliser le $ home avec mkdir , Vous pouvez utiliser le getenv fonction Comme: xxx


3 commentaires

-1 pour donner un exemple de code avec un énorme problème de dépassement de tampon. Vous devez éditer ceci pour utiliser SNPRINTF ou vérifier la longueur de home avant d'appeler sprintf .


@ R..githubstophelingice ou vous pouvez être un programmeur qui connaît la longueur maximale possible pour un répertoire de base et vous savez que max est au moins cette taille ou plus grande. Ces fonctions sont vraiment pour les personnes qui ne savent pas ce qu'ils font. C'est pourquoi ils n'existaient pas dans le passé quand les gens savaient comment programmer.


@Deanie: Il n'y a pas de longueur maximale sur la valeur de la variable d'environnement home , même s'il y a un maximum sur ce qui est un chemin de chemin valide. Le code tel qu'il est écrit est soumis au débordement de la mémoire tampon et à écrire un code mal comme celui-ci est exactement le contraire de "savoir programmer".