--group-directories-ilk seçenek “ls” komutu için


13

Hem Ubuntu 16.04 hem de OS X kullanıyorum.

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

Bu benim bashrc'mdeki bir takma ad, ancak bash'ı --group-directories-firstHomebrew ile yükselttikten sonra OS X'te bir şekilde seçenek yasadışı oldu. Ubuntu masaüstümde hala bu seçeneği kullanabilirim.

Bash'in hangi sürümünde seçenek desteklenmiyor? OS X makinemdeki Bash sürümü diyorGNU bash, Version 4.4.12(1)-release (x86_64-apple-darwin15.6.0)

--group-directories-firstSeçeneği tekrar kullanmak istiyorum . Bunu başarmanın bir yolu var mı?


1
Eğer gnu correutils kullanıyor musunuz lsveya MacOS ls? Diğerini denedin mi?
bmike

Yanıtlar:


12

Yükleme coreutilsHomebrew ve takma adla lliçin gls -Flh --group-directories-firstyerine.

  • brew install coreutils kurulu değilse GNU Coreutils'i kurar .
  • Kullan alias ll='gls -Flh --group-directories-first'içinde .bashrc.
    (Aynı .bashrcdosyayı her iki işletim sisteminde de kullanmak istiyorsanız , aşağıya bakın.)

Ubuntu'da, Ubuntu'nun her zaman sahip olduğu lsGNU Coreutils tarafından sağlanır . Bu yüzden Ubuntu'da lsdestekler --group-directories-first. Muhtemelen daha önce MacOS'un GNU Coreutils sürümünü lsde kullanıyordunuz, Homebrew'un yüklediği, glsancak lsçeşitli şekillerde kullanılabilir hale getirilebildiği .

lsBash yerleşkesi değil harici bir komuttur. Bash'in farklı bir sürümünü veya derlemesini kullanmak onu etkilememelidir. Bash'i Homebrew kullanarak yükselttiğinizde ne olduğundan emin değilim. Belki de Bash'den daha fazlası yükseltildi; belkilsdeğiştirilen bir genel yapılandırma dosyasında tanımlanmışbirkabuk işleviniz veya takma adınızvardı; belkilsişaret edenglsve üzerine yazılmışsembolik bir bağınızvardı; belki hala böyle bir şey var ama senin$PATHdeğişti. Ne olursa olsun, GNU Coreutils lsdestekliyor--group-directories-first ve ona ( bmike'ın önerdiğine göre )geçiş yapmaksorununuzu çözmeli .

Herhangi bir nedenle aynı .bashrcdosyayı her iki sistemde de kullanmak istiyorsanız , birkaç olası yaklaşım vardır. glsUbuntu sisteminizde bir sembolik bağlantı, sarmalayıcı komut dosyası, kabuk işlevi veya (Bash takma adı genişletmesi yinelemesiz olduğu için) kabuk takma adı oluşturabilirsiniz . Ama bunun yerine önermek OS kullanılıyor denetimi içinde .bashrc. Her llsistemde farklı bir takma ad tanımlasanız da, bu yaklaşım kendi kendini belgeleme avantajına sahiptir. Sizin .bashrcbir yılda sana mantıklı, veya bir ay yapacak.

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

Veya takma adı lskullanmasanız bile genellikle Coreutils'i çalıştırmayı tercih ederseniz , llaşağıdakiler için lsbir takma ad yapabilirsiniz gls:

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

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

(Teşekkürler gitmek soroushjp için bir hata yakalama bu komut dosyasının önceki bir sürümünde.)


Bu cevabı takip ettim ve kullanıyorum: takma ad ls = 'gls --color -h --group-directories-first' takma ad ll = 'ls -al'
user2875289

1
Ben senin son bölümde düşünüyorum "Yoksa bulursanız genellikle ... koşmayı tercih" şartlı ihtiyaçlar için değiştirilmesi,: "$OSTYPE" != linux-gnu Eğer takma vermesini istedikleri, ls için gls sen eğer değil Linux GNU sistemi üzerinde (örneğin Mac kullanıyorsanız).
soroushjp

1
@soroushjp Teşekkürler - haklısın. (
Düzeltdim
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.