2017-09-09 5 views
0

Bonjour, J'ai récemment téléchargé this configuration .bash_profile, mais je rencontre un petit problème lors de l'exécution de la commande ls dans Terminal (Mac OS X - Sierra, 10.12.6).ls - Ne fonctionne pas dans certains répertoires

Error 1

ls: illegal option -- - usage: ls [-ABCFGHLOPRSTUWabcdefghiklmnopqrstuwx1] [file ...]

Comme vous pouvez le voir, je n'ai pas d'alias, et ls est où il devrait être (je l'espère au moins).

Que se passe-t-il ici? Tout ce que je devrais faire pour essayer de remédier à cette situation?

Répondre

3

Le problème est de savoir comment fonctionne * dans le shell.

Certaines personnes pensent que lorsque vous écrivez ls *, le shell exécutera ls en passant le caractère générique et cette commande listera tous les fichiers. Mais en réalité c'est le shell qui étend le * dans une liste de tous les fichiers et les transmet à ls.

TL; DR; vous avez un nom de répertoire qui commence par -! (Je pense qu'il est nommé juste -). Donc, lorsque vous exécutez ls -d */, il est étendu à quelque chose comme ls -d -/ bar/ muz/ .... Vous pouvez voir l'expansion réelle avec echo ls -d */

Solution: écrire ls -d -- */. Le -- indiquera à la commande de ne pas interpréter d'autres commandes commençant par - en option, mais en tant que nom de fichier.

+0

Huh, c'est un peu inintéressant, mais néanmoins fascinant! Savez-vous s'il y a une raison historique c'est le cas? J'aimerais apprendre plus! –

+1

@RicardoIglesias: Unintuitive en effet. Soyez reconnaissant que vous avez découvert cela avec 'ls' ... J'ai fait il y a beaucoup d'années avec' rm'! – rodrigo

+1

Une autre solution (pour les versions de 'ls' ou autre commande qui ne supporte pas' --') est d'utiliser 'ls -d ./*/'. Le '. /' Supplémentaire devant le modèle de fichier n'affecte pas leur interprétation en tant que noms de fichiers ("./" signifie simplement "dans le répertoire courant"), mais cela les rend sans ambiguïté, puisque './-' ne sera pas être confondu avec une option de commande. –