Balık (Unix kabuğu) - Fish (Unix shell)

balık
Balık kabuğu logosu ascii.png
Balık kabuğu.
Balık kabuğu. "Balık - dost canlısı etkileşimli kabuk" sloganı en üstte görüntülenir.
Orijinal yazar (lar)Axel Liljencrantz
Geliştirici (ler)gülünçbalık, siteshwar, JanKanis[1]
İlk sürüm13 Şubat 2005; 15 yıl önce (2005-02-13)
Kararlı sürüm
3.1.2 / 29 Nisan 2020; 7 ay önce (2020-04-29)[2]
Depo Bunu Vikiveri'de düzenleyin
İşletim sistemiUnix benzeri
TürUnix kabuğu
LisansGPL v2[3]
İnternet sitesibalık kabuğu.com

balık bir Unix kabuğu Daha uzun bir geçmişe sahip olanlardan (yani diğer birçok Unix kabuğundan) daha etkileşimli ve kullanıcı dostu olmaya çalışan veya yukarıda belirtilenler için işlev uyumlu ikameler olarak formüle edilenlerden (ör. zsh Falstad kabuğu). Balığın tasarım amacı, kullanıcıya keşfetmesi, hatırlaması ve kullanması kolay bir şekilde zengin ve güçlü özellikler sunmaktır.[4] balık "egzotik kabuk ",[kaynak belirtilmeli ] sözdizimi ne türden Bourne kabuğu (ksh, Bash, zsh ) ne de C kabuğu (csh, tcsh ). Ayrıca, sistem kaynaklarını korumak için varsayılan olarak belirli özellikleri devre dışı bırakan önceki kabuklardan farklı olarak, fish tüm özellikleri varsayılan olarak etkinleştirir.

Öne Çıkanlar

Fish has "yazarken ara " otomatik öneriler geçmişe ve mevcut dizine dayanmaktadır. Bu aslında Bash'in Ctrl+R geçmiş arama, ancak ayrı bir mod olmak yerine her zaman açık olduğundan, kullanıcı komut satırını yazarken sürekli geri bildirim alır ve ok tuşlarıyla önerileri seçebilir veya Bash'de olduğu gibi Sekme ↹ bunun yerine sekme tamamlama için. Sekme tamamlama zengin özelliklere sahiptir, genişleyen dosya yolları ( joker karakterler ve ayraç genişlemesi ), değişkenler ve birçok komuta özel tamamlama. Açıklamalı seçenekler de dahil olmak üzere komuta özgü tamamlamalar, bir dereceye kadar komutların yönetim sayfalarından oluşturulabilir.

Fish'in çok az sözdizimsel kuralı vardır ve özellikleri sözdizimi yerine komut olarak tercih eder. Bu özellikler yapar keşfedilebilir seçenekler ve yardım metinleri ile komutlar açısından. Fonksiyonlar insan tarafından okunabilir bir açıklama da taşıyabilir. Özel bir Yardım komutu, kullanıcının içindeki tüm balık belgelerine erişim sağlar. internet tarayıcısı.[5]

Sözdizimi

Sözdizimi bir POSIX uyumlu kabuk (Bash gibi), ancak yaratıcıların POSIX kabuğunun kötü bir şekilde tasarlandığına inandıkları yerlerde önemli şekillerde sapma gösterir.[6]

# Değişken ataması, 'foo' değişkenini # değer 'bar'. Balık = operatörünü kullanmaz, çünkü # doğası gereği boşluklara duyarlıdır. Ayrıca set # command kolayca dizilerle, kapsamlarla vb. çalışacak şekilde genişler.> Ayarlamak foo bar> Eko $ foobar # Komut değiştirme, komutun çıktısını atayın # 'wd' değişkenine 'pwd'. Balık kullanmaz '' # çünkü yuvalanamazlar ve çok benzedikleri için ''. # $ Yalnızca değişken için kullanıldığından, $ () kullanmayın # balıkta genişleme.> Ayarlamak wd (pwd)> Eko $ wd~# Dizi değişkenleri. 'A', 5 değerli bir dizi olur:> Ayarlamak Bir 3 5 7 9 12# Dizi dilimleme. "B", "A" nın ilk iki öğesi olur:> Ayarlamak B A $[1 2]> Eko $ B3 5# Diğer dizilerle ve hatta komutlarla indeksleyebilirsiniz # değiştirme çıktısı:> Eko A $[(seq 3)]3 5 7# 'A'nın üçüncü ve beşinci öğelerini silin> Ayarlamak --erase A[$ B]> Eko A $3 5 9# for-loop, jpeg'leri pngs'ye dönüştür> için ben içinde * .jpg dönüştürme $ i (baz adı $ i .jpg).png son# Noktalı virgüller yeni satırlar gibi çalışır:> için ben içinde * .jpg; dönüştürmek $ i (baz adı $ i .jpg).png; son# ancak çok satırlı formun kullanımı rahat çünkü # balık, çok satırlı geçmişi ve düzenlemeyi destekler.# while-loop, / etc / passwd satırlarını okuyun ve beşinci çıktısı alın Dosyadan iki nokta üst üste ile ayrılmış alan. Bu olmalı# kullanıcı açıklaması.> süre okumak hat Ayarlamak arr (Eko $ line|tr:  n)      Eko $ arr[5]  son < / etc / passwd

Örtülü alt kabuk yok

Gibi bazı dil yapıları boru hatları, fonksiyonlar ve döngüler, diğerlerinde sözde alt kabuklar kullanılarak uygulanmıştır. kabuk Diller. Alt kabuklar, kabuk için birkaç komut çalıştıran ve sonra çıkan basit programlardır. Ne yazık ki, bu uygulama ayrıntısı tipik olarak, alt kabukta yapılan herhangi bir durum değişikliğinin, örneğin değişken atamalarının ana kabuğa yayılmaması gibi yan etkiye sahiptir, bu da kullanıcıyı şaşırtabilir. Balık asla alt kabukları çatallamaz; tüm yerleşikler her zaman tamamen işlevseldir.

# Bu, 'oku' yerleşik olduğundan diğer birçok kabukta çalışmayacaktır.# kendi alt kabuğunda çalışacaktır. Bash'de borunun sağ tarafı# herhangi bir yan etkiye sahip olamaz. Ksh'de aşağıdaki komut çalışır, ancak# sol tarafın herhangi bir yan etkisi olamaz. Balıkta ve zsh'da, her ikisi de# tarafın yan etkileri olabilir.> kedi * .txt | okumak hat

Değişken atama örneği

Bu Bash örneği göründüğünü yapmaz: döngü gövdesi bir altkabuk olduğundan, $ bulundu kalıcı değil.

bulundu=''kedi / etc / fstab | süre okumak dev mnt dinlenme; yapmak  Eğer Ölçek "$ mnt" = "/"; sonra    bulundu="$ dev"  fibitti

Çözüm:

bulundu=''süre okumak dev mnt dinlenme; yapmak  Eğer Ölçek "$ mnt" = "/"; sonra    bulundu="$ dev"  fibitti

Balıkların geçici bir çözüme ihtiyacı yoktur:

Ayarlamak bulundu ''kedi / etc / fstab | süre okumak dev mnt dinlenme Eğer Ölçek "$ mnt" = "/"    Ayarlamak bulundu $ dev  sonson

Yararlı hata mesajları

Balıktaki hata mesajları, kullanıcıya neyin yanlış gittiğini ve bu konuda neler yapılabileceğini gerçekten anlatmak için tasarlanmıştır.[7]

> foo=barbalık: Bilinmeyen komut “foo = bar”. "DEĞİŞKEN DEĞER ayarla" mı demek istediniz?Değişken değerlerini ayarlama hakkında bilgi için, yardım bölümüne bakın."yardım seti" yazarak set komutunu.> Eko ${foo}barbalık: {$ DEĞİŞKEN} mi demek istediniz? '$' Karakteri bir değişkene başlarisim. Doğrudan bir "$" dan sonra gelen parantezin birbir değişken adının parçası ve değişken adları sıfır karakter olamazuzun. Balıkta değişken genişleme hakkında daha fazla bilgi edinmek için "yardım" yazıngenişleyen değişken ”.> Eko $(pwd)balık: (KOMUT) mu demek istediniz? Balıkta sadece '$' karakteri kullanılırdeğişkenlere erişmek için. Komut ikamesi hakkında daha fazla bilgi edinmek içinbalık, "yardım genişlet-komut-değiştirme" yazın.

Evrensel değişkenler

Fish, kullanıcının tüm çalışan balık kabukları boyunca bir değişkene kalıcı olarak bir değer atamasına izin veren evrensel değişkenler olarak bilinen bir özelliğe sahiptir. Değişken değeri, oturum kapatma ve yeniden başlatma işlemlerinde hatırlanır ve güncellemeler hemen tüm çalışan kabuklara yayılır.

# Bu, emacs'i varsayılan metin düzenleyicisi yapar. '--Universal' (veya '-U') balıklara# bunu evrensel bir değişken yapın.> Ayarlamak --universal EDITOR emacs# Bu komut mevcut çalışma dizinini balığın bir parçası yapacak# istem tüm çalışan balık örneklerinde maviye döner.> Ayarlamak --universal fish_color_cwd mavi

Diğer özellikler

Sürüm 2 şunları ekler:

  • Otomatik öneriler
  • 256 terminal rengi
  • Web tabanlı konfigürasyon
  • Geliştirilmiş performans (daha fazla yerleşik ile).

Bash / fish çeviri tablosu

ÖzellikBash sözdizimibalık sözdizimiYorum Yap
değişken genişletme:
kelime bölme ve küre yorumlama
$ var

veya

$ {var [@]}

veya

$ {değişken [*]}
kasıtlı olarak ihmal edilmişPosix uyumlu kabuk dillerinde hataların birincil nedeni olarak tanımlandı[8]
değişken genişletme:
skaler
"$ var"
kasıtlı olarak ihmal edilmişHer değişken bir dizidir
değişken genişletme:
dizi
"$ {değişken [@]}"
$ var
Sözcük ayırmayı ve glob yorumlamayı bastırmak için alıntı yapmak gerekli değildir. Bunun yerine, alıntı yapmak serileştirmeyi belirtir.
değişken genişletme:
boşlukla ayrılmış dizge olarak
"$ {değişken [*]}"
"$ var"
tarih tamamlamaCtrl+Rörtük
tarih ikamesi!!kasıtlı olarak ihmal edilmişKeşfedilemez
açık alt kabuk
(ifade)
balık -c ifadesi
komut ikamesi
"$ (ifade)" 
(ifade) 
işlem ikamesi
<(ifade)
(ifade | psub)
Komut, sözdizimi değil
mantıksal operatörler
! cmd && Eko BAŞARISIZ || Eko TAMAM MI
değil komutve Eko BAŞARISIZveya Eko TAMAM MI
değişken atama
var = değer 
Ayarlamak var değeri
dize işleme:
yerine koymak
"$ {HOME / alice / bob}"
dize alice bob $ HOME yerine
dize işleme:
açgözlülük veya açgözlülükle ön ek veya son ek kalıbını kaldırın
var=ABC"${var#*.}"  #M.Ö"${var##*.}" #c"${var%.*}"  # a.b"${var%%.*}" #a
dize değiştirme --regex '.*?\.(.*)' '$1' ABC #M.Ödize değiştirme --regex '.*\.(.*)' '$1' ABC #cdize değiştirme --regex '(.*)\..*' '$1' ABC # a.bdize değiştirme --regex '(.*?)\..*' '$1' ABC #a
ihracat değişkeni
ihracat değişkeni 
set --export var 
Sekme tamamlama yoluyla keşfedilebilen seçenekler
işlev yerel değişken
yerel değişken
varsayılan olarak
kapsam yerel değişkeneşdeğeri yok
set --local var
değişkeni kaldır
ayarlanmamış değişken 
set --erase var 
bir değişken olup olmadığını kontrol edin
test -v var
set --query var
dizi başlatma
var = (a b c) 
Ayarlamak var a b c
Her değişken bir dizidir
dizi yinelemesi
için içindeyim "${var[@]}"; yapmak  Eko "$ i"bitti
için ben içinde $ var  Eko $ ison
bağımsız değişken vektör:
tüm argümanlar
"$@" 
$ argv 
bağımsız değişken vektör:
indeksleme
"$1" 
$ argv [1] 
bağımsız değişken vektör:
uzunluk
$#
($ argv'yi say)
bağımsız değişken vektör:
vardiya
vardiya
Ayarlamak --erase argv[1]
ortam değişkenlerinde dizi gösterimi
PATH="$ PATH:$ HOME/.local/bin "
Ayarlamak PATH $ PATH $ HOME/.local/bin
fish, iki nokta üst üste birimini değişkenleri ortama ve ortama çevirmek için dizi sınırlayıcı olarak kabul eder. Bu, $ PATH ve $ LS_COLORS gibi birçok dizi benzeri ortam değişkeniyle uyumludur.
dışa aktar ve çalıştır
LANG = C.UTF-8 python3 
env LANG=C.UTF-8 python3
env LANG=C.UTF-8 python3 env bağımsız bir program olduğundan herhangi bir kabukta çalışır.
aritmetik
$((10/3))
matematik '10 / 3 '
ifade 10 / 3 ifade bağımsız bir program olduğundan herhangi bir kabukta çalışır.
kaçış dizisi
$ ' e'
 e 
printf " e" her iki kabukta da çalışır; onların printf yerleşiklerin her ikisi de GNU ile uyumludur printf bağımsız program.[9]
tek tırnaklı dize:
Kaçış dizileri
'anne'\'son ters eğik çizgi:  '
'anne\'son ters eğik çizgi: \\'
Bash, yalnızca tek tırnaklı dizelerde tek tırnağın kendisinin değiştirilmesini gerektirir, ancak değiştirme 4 karakter uzunluğundadır. Aynı değiştirme balıkta da işe yarar, ancak balık bunun için düzenli bir kaçış dizisini destekler, bu nedenle de kaçan ters eğik çizgi gerektirir (başka bir ters eğik çizgiden veya tek tırnaktan önce gelmeyen tek ters eğik çizgilere izin vermesi dışında).

Ayrıca bakınız

Referanslar

  1. ^ "balık kabuğu ekip üyeleri". GitHub.com. Alındı 2013-05-21.
  2. ^ [1] Balık 3.1.2 için Sürüm Notları
  3. ^ fishshell.com Balık ruhsatı
  4. ^ Haftalık Linux Haberleri. Balık - Kullanıcı dostu bir kabuk. Erişim tarihi: 2010-03-24.
  5. ^ Linux.com. CLI Magic: Kabuğu balıkla geliştirmek. Erişim tarihi: 2010-03-24.
  6. ^ Paul, Ryan. "Balıklara derinlemesine bir bakış: dost canlısı etkileşimli kabuk". Ars Technica. Alındı 10 Mart 2015. Posix sözdiziminin değişken kapsam, diziler ve işlevler dahil olmak üzere birçok eksik veya kötü uygulanmış özelliği vardır. Bu nedenle balık, birçok önemli yerde Posix sözdiziminden uzaklaşır.
  7. ^ Linux ile başa çıkın. Komut satırından mı korkuyorsunuz? Balık dene. Arşivlenen orijinal 2012-07-19 tarihinde.
  8. ^ "Bash Tuzakları". Alındı 2016-07-10. Bu sayfa, Bash programcılarının yaptığı yaygın hataları gösterir. (…) Her zaman tırnak işaretleri kullanırsanız ve herhangi bir nedenle sözcük ayırmayı asla kullanmazsanız kendinizi bu tuzakların çoğundan kurtaracaksınız! Sözcük bölme, genişlemelerden alıntı yapmazsanız varsayılan olarak takılı kalan, Bourne kabuğundan miras alınan bozuk bir eski yanlış özelliktir. Tuzakların büyük çoğunluğu bir şekilde alıntılanmamış genişletmelerle ve bunun sonucunda ortaya çıkan kelime bölme ve küreselleşmeyle ilgilidir.
  9. ^ "printf e'yi desteklemiyor". balık sorunları. 11 Temmuz 2013. Alındı 24 Mart 2016.

Dış bağlantılar