- grupo-directorios-primera opción para el comando "ls"

9

Estoy usando Ubuntu 16.04 y OS X.

alias ll='ls -Flh --group-directories-first'

Este es un alias en mi bashrc, pero de alguna manera la opción --group-directories-first se volvió ilegal en OS X después de haber actualizado mi bash con Homebrew. En mi escritorio de Ubuntu, todavía puedo usar esa opción.

¿En qué versión de Bash, la opción no es compatible? La versión de Bash en mi máquina OS X dice GNU bash, Version 4.4.12(1)-release (x86_64-apple-darwin15.6.0)

Me gustaría usar la opción --group-directories-first nuevamente. ¿Hay alguna manera de lograrlo?

    
pregunta IzumiSy 01.10.2017 - 04:30

1 respuesta

10

En su lugar, instale coreutils con Homebrew y alias ll a gls -Flh --group-directories-first .

  • brew install coreutils instala GNU Coreutils , en caso de que no esté instalado.
  • Use alias ll='gls -Flh --group-directories-first' en .bashrc .
    (Si desea utilizar el mismo archivo .bashrc en ambos sistemas operativos, consulte a continuación).

En Ubuntu, ls es proporcionado por GNU Coreutils , que Ubuntu siempre tiene. Es por eso que ls soporta --group-directories-first en Ubuntu. Probablemente usted también había estado utilizando la versión GNU Coreutils de ls en macOS anteriormente, que Homebrew instala como gls pero que puede ser utilizable como ls de varias maneras.

ls es un comando externo, no un Bash integrado . El uso de una versión o compilación diferente de Bash no debería afectarlo. No estoy seguro de lo que sucedió cuando actualizaste Bash usando Homebrew. Tal vez más que Bash también se actualizó; tal vez tenía una función de shell ls o un alias definido en un archivo de configuración global que fue reemplazado; tal vez tenías un enlace simbólico ls que había señalado a gls y se sobrescribió; quizás todavía tengas algo así, pero tu $PATH ha cambiado. Pase lo que pase, GNU Coreutils ls admite --group-directories-first , y cambiar a él (como creo en bmike es sugerir ) debería solucionar su problema.

Si, por algún motivo, desea utilizar el mismo archivo .bashrc en ambos sistemas, hay algunos enfoques posibles. Podría crear un enlace simbólico, un script de envoltura, una función de shell o (porque la expansión del alias de Bash no es recurrente) alias de shell para gls en su sistema Ubuntu. Pero sugiero en cambio comprobar qué sistema operativo se está utilizando en .bashrc . Aunque obtendrá un alias ll diferente definido en cada sistema, este enfoque tiene la ventaja de ser autodocumentado. Su .bashrc tendrá sentido para usted en un año o un mes.

if [ "$OSTYPE" == linux-gnu ]; then  # Is this the Ubuntu system?
    alias ll='ls -Flh --group-directories-first'
else
    alias ll='gls -Flh --group-directories-first'
fi

O si normalmente prefieres ejecutar Coreutils ls , incluso si no estás utilizando el alias ll , puedes hacer que ls sea un alias para gls :

if [ "$OSTYPE" == linux-gnu ]; then  # Is this the Ubuntu system?
    alias ls=gls
fi

alias ll='ls -Flh --group-directories-first'
    
respondido por el Eliah Kagan 01.10.2017 - 22:44

Lea otras preguntas en las etiquetas