--gruppo-directory-prima opzione per il comando "ls"

9

Sto usando sia Ubuntu 16.04 sia OS X.

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

Questo è un alias nella mia bascrc, ma in qualche modo l'opzione --group-directories-first è diventata illegale in OS X dopo aver aggiornato la mia bash con Homebrew. Nel mio desktop di Ubuntu, posso ancora usare questa opzione.

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

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

    
posta IzumiSy 01.10.2017 - 04:30
fonte

1 risposta

10

Installa coreutils con Homebrew e alias ll in gls -Flh --group-directories-first invece.

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

In Ubuntu, ls è fornito da GNU Coreutils , che Ubuntu ha sempre. Ecco perché ls supporta --group-directories-first in Ubuntu. Probabilmente hai utilizzato la versione GNU Coreutils di ls su macOS anche prima, che Homebrew installa come gls ma che può essere reso utilizzabile come ls in diversi modi.

ls è un comando esterno, non un Bash incorporato . L'uso di una versione o build diversa di Bash non dovrebbe influenzarlo. Non sono sicuro di cosa sia successo quando hai aggiornato Bash usando Homebrew. Forse più di Bash è stato aggiornato anche; forse hai una funzione di shell ls o un alias definito in un file di configurazione globale che è stato sostituito; forse hai avuto un link simbolico ls che aveva indicato gls ed è stato sovrascritto; forse hai ancora qualcosa di simile ma il tuo $PATH è cambiato. Qualunque cosa sia successa, GNU Coreutils ls supporta --group-directories-first e passando ad esso (come credo bmike è suggerendo ) dovrebbe risolvere il tuo problema.

Se per qualche motivo si desidera utilizzare esattamente lo stesso file .bashrc in entrambi i sistemi, ci sono alcuni possibili approcci. Puoi creare un link simbolico, uno script wrapper, una funzione di shell o (perché l'espansione dell'alias di Bash non è ricorsiva) alias di shell per gls nel tuo sistema Ubuntu. Tuttavia, suggerisco di verificare quale sistema operativo viene utilizzato in .bashrc . Sebbene si ottenga un alias diverso di ll definito in ciascun sistema, questo approccio ha il vantaggio di essere auto-documentante. Il tuo .bashrc ha senso 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

O se ritieni che di solito preferisci eseguire Coreutils ls , anche se non stai utilizzando l'alias ll , puoi rendere ls un alias a gls :

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

alias ll='ls -Flh --group-directories-first'
    
risposta data 01.10.2017 - 22:44
fonte

Leggi altre domande sui tag