--group-directories-first opzione per il comando "ls"


13

Sto usando sia Ubuntu 16.04 che OS X.

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

Questo è un alias nel mio bashrc, ma in qualche modo l' --group-directories-firstopzione è diventata illegale in OS X dopo aver aggiornato il mio bash con Homebrew. Nel mio desktop Ubuntu, posso ancora usare quell'opzione.

In quale versione di Bash, l'opzione non è supportata? La versione di Bash nella mia macchina OS X diceGNU bash, Version 4.4.12(1)-release (x86_64-apple-darwin15.6.0)

Vorrei usare di --group-directories-firstnuovo l'opzione. C'è un modo per raggiungerlo?


1
Stai usando gnu correutils lso macOS ls? Hai provato l'altro?
bmike

Risposte:


12

Installare coreutilscon Homebrew e alias lla gls -Flh --group-directories-firstposto.

  • brew install coreutils installa GNU Coreutils , nel caso in cui non sia installato.
  • Utilizzare alias ll='gls -Flh --group-directories-first'in .bashrc.
    (Se si desidera utilizzare lo stesso .bashrcfile in entrambi i sistemi operativi, vedere di seguito.)

In Ubuntu, lsè fornito da GNU Coreutils , che Ubuntu ha sempre. Ecco perché lssupporta --group-directories-firstin Ubuntu. Probabilmente avevi già usato la versione GNU Coreutils di lssu macOS, che Homebrew installa come glsma che può essere resa utilizzabile lsin diversi modi.

lsè un comando esterno, non incorporato in Bash. L'uso di una versione o build diversa di Bash non dovrebbe influire su di essa. Non sono sicuro di cosa sia successo quando hai aggiornato Bash usando Homebrew. Forse è stato aggiornato anche più di Bash; forse avevi unalsfunzione di shell o un alias definito in un file di configurazione globale che è stato sostituito; forse avevi un legame simbolicolsche aveva indicatoglsed era stato sovrascritto; forse hai ancora qualcosa del genere ma il tuo$PATHè cambiato. Qualunque cosa sia successa, GNU Coreutils lssupporta--group-directories-first e il passaggio ad esso (come credo che bmike stia suggerendo ) dovrebbe risolvere il tuo problema.

Se per qualche motivo si desidera utilizzare lo stesso .bashrcfile esatto in entrambi i sistemi, esistono alcuni approcci possibili. È possibile creare un collegamento simbolico, uno script wrapper, una funzione shell o (poiché l'espansione dell'alias Bash non è ricorsiva) per l'alias shell glsnel proprio sistema Ubuntu. Ma suggerisco invece controllare quale sistema operativo viene utilizzato in .bashrc. Sebbene otterrai un diverso llalias definito in ciascun sistema, questo approccio ha il vantaggio di essere auto-documentato. Avrai .bashrcsenso per te tra un anno o un mese.

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

Oppure, se ritieni di preferire di solito eseguire Coreutils ls, anche se non stai usando l' llalias, puoi creare lsun alias per gls:

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

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

(Grazie a soroushjp per aver scoperto un errore in una versione precedente di quello script.)


Ho seguito questa risposta e ho usato: alias ls = 'gls --color -h --group-directories-first' alias ll = 'ls -al'
user2875289

1
Credo che nel vostro ultimo capitolo "O se si trova di solito preferisco correre ..." , le esigenze condizionali per essere cambiato in: "$OSTYPE" != linux-gnu , dal momento che si desidera alias ls a GLS se siete non su un sistema Linux GNU (per esempio, sei su un Mac).
soroushjp,

1
@soroushjp Grazie - hai ragione. (L'ho risolto; mi dispiace per l'attesa!)
Eliah Kagan
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.