J'utilise à la fois Ubuntu 16.04 et OS X.
alias ll='ls -Flh --group-directories-first'
Ceci est un alias dans mon bashrc, mais l' --group-directories-first
option est devenue illégale sous OS X après avoir mis à niveau mon bash avec Homebrew. Dans mon bureau Ubuntu, je peux toujours utiliser cette option.
Dans quelle version de Bash, l'option n'est pas prise en charge? La version Bash de ma machine OS X ditGNU bash, Version 4.4.12(1)-release (x86_64-apple-darwin15.6.0)
Je voudrais utiliser à --group-directories-first
nouveau l'option. Existe-t-il un moyen d'y parvenir?
ls
ou le macOSls
? Avez-vous essayé l'autre?Réponses:
Installez
coreutils
avec Homebrew et aliasll
à lagls -Flh --group-directories-first
place.brew install coreutils
installe GNU Coreutils , au cas où il ne serait pas installé.alias ll='gls -Flh --group-directories-first'
dans.bashrc
.(Si vous souhaitez utiliser le même
.bashrc
fichier dans les deux systèmes d'exploitation, voir ci-dessous.)Dans Ubuntu,
ls
est fourni par GNU Coreutils , que Ubuntu a toujours. C'est pourquoi lesls
supports--group-directories-first
dans Ubuntu. Vous utilisiez probablement la version GNU Coreutils dels
sur macOS auparavant, que Homebrew installe en tant quegls
mais qui peut être rendue utilisable commels
de plusieurs manières.ls
est une commande externe, pas un Bash intégré. L'utilisation d'une version ou d'une construction différente de Bash ne devrait pas l'affecter. Je ne sais pas ce qui s'est passé lorsque vous avez mis à niveau Bash en utilisant Homebrew. Peut-être que Bash a également été mis à niveau; vous aviez peut-être unels
fonction shell ou un alias défini dans un fichier de configuration globale qui a été remplacé; vous aviez peut-être un lien symboliquels
qui avait pointé du doigtgls
et avait été écrasé; peut-être que vous avez encore quelque chose comme ça, mais votre$PATH
a changé. Quoi qu'il se soit passé, GNU Coreutilsls
prend en charge--group-directories-first
, et le basculement vers celui-ci (comme je pense que bmike le suggère ) devrait résoudre votre problème.Si, pour une raison quelconque, vous souhaitez utiliser exactement le même
.bashrc
fichier dans les deux systèmes, il existe plusieurs approches possibles. Vous pouvez créer un lien symbolique, un script d'encapsuleur, une fonction shell ou (parce que l'expansion d'alias Bash n'est pas récursive) un alias shell pourgls
dans votre système Ubuntu. Mais je suggère plutôt vérifier quel système d' exploitation est utilisé dans.bashrc
. Bien que vous obtiendrez unll
alias différent défini dans chaque système, cette approche a l'avantage d'être auto-documentée. Votre.bashrc
aura un sens pour vous dans un an ou un mois.Ou si vous trouvez que vous préférez généralement exécuter les Coreutils
ls
, même si vous n'utilisez pas l'll
alias, vous pouvez créerls
un alias pourgls
:(Merci à soroushjp pour avoir détecté une erreur dans une version antérieure de ce script.)
la source
"$OSTYPE" != linux-gnu
puisque vous voulez alias ls en gls si vous n'êtes pas sur un système Linux GNU (par exemple vous êtes sur un Mac).