Ryba (Unix shell) - Fish (Unix shell)
tento článek potřebuje další citace pro ověření.Květen 2019) (Zjistěte, jak a kdy odstranit tuto zprávu šablony) ( |
Rybí skořápka. Nahoře je zobrazen jeho slogan „fish - the friendly interactive shell“. | |
Původní autoři | Axel Liljencrantz |
---|---|
Vývojáři | absurdní ryby, siteshwar, JanKanis[1] |
První vydání | 13. února 2005 |
Stabilní uvolnění | 3.1.2 / 29. dubna 2020[2] |
Úložiště | |
Operační systém | Unixový |
Typ | Unix shell |
Licence | GPL v2[3] |
webová stránka | mušle |
Ryba je Unix shell které se snaží být interaktivnější a uživatelsky přívětivější než ty, které mají delší historii (tj. většina ostatních unixových skořápek), nebo ty, které jsou formulovány jako funkčně kompatibilní náhrady výše zmíněných (např. zsh, plášť Falstad). Cílem designu ryby je poskytnout uživateli bohatou sadu výkonných funkcí způsobem, který lze snadno objevit, zapamatovat si a použít.[4] ryba je považována za „exotická skořápka ",[Citace je zapotřebí ] v tom, že jeho syntaxe není odvozena ani od Bourneova skořápka (ksh, Bash, zsh ) ani plášť C (csh, tcsh ). Na rozdíl od předchozích skořápek, které ve výchozím nastavení deaktivují určité funkce, aby šetřily systémové prostředky, umožňuje ryba ve výchozím nastavení všechny funkce.
Hlavní body
Ryba máhledejte při psaní " automatické návrhy na základě historie a aktuálního adresáře. Je to v podstatě jako Bash Ctrl+R vyhledávání historie, ale protože je vždy zapnuto, místo samostatného režimu, získává uživatel nepřetržitou zpětnou vazbu při psaní příkazového řádku a může vybírat návrhy pomocí kláves se šipkami nebo jako v Bash, stiskněte Záložka ↹ místo toho dokončíte kartu. Dokončení karty je bohatý na funkce a rozšiřuje cesty k souborům (s zástupné znaky a rozšíření výztuhy ), proměnné a mnoho doplňků specifických pro příkazy. Dokončení specifická pro příkazy, včetně možností s popisy, lze do určité míry generovat z manuálových stránek příkazů.
Fish má několik syntaktických pravidel, dává přednost funkcím spíše než příkazům než syntaxi. To dělá funkce objevitelný pokud jde o příkazy s možnostmi a texty nápovědy. Funkce může nést i lidsky čitelný popis. Speciální Pomoc příkaz umožňuje přístup ke veškeré dokumentaci ryb v uživatelské dokumentaci webový prohlížeč.[5]
Syntax
Syntaxe se podobá a POSIX kompatibilní shell (například Bash), ale liší se důležitými způsoby tam, kde se tvůrci domnívají, že POSIX shell byl špatně navržen.[6]
# Přiřazení proměnné, nastavte proměnnou 'foo' na # hodnota 'bar'. Fish od té doby nepoužívá operátor = # je neodmyslitelně citlivý na mezery. Také sada # příkaz lze snadno rozšířit na práci s poli, rozsahem atd.> soubor foo bar> echo $ foobar # Substituce příkazu, přiřaďte výstup příkazu # 'pwd' do proměnné 'wd'. Ryby nepoužívají `` # protože nemohou být vnořeny a vypadají příliš podobně jako ''. # Nepoužívejte $ (), protože $ se používá pouze pro proměnnou # expanze u ryb.> soubor wd (pwd)> echo $ wd~# Proměnné pole. 'A' se stává maticí s 5 hodnotami:> soubor A 3 5 7 9 12# Řezání polí. Z „B“ se stávají první dva prvky „A“:> soubor B $ A[1 2]> echo $ B3 5# Můžete indexovat pomocí jiných polí a dokonce i příkazů # substituční výstup:> echo $ A[(seq 3)]3 5 7# Vymažte třetí a pátý prvek znaku „A“> soubor --erase A[$ B]> echo $ A3 5 9# for-loop, převést JPEG na PNG> pro i v * .jpg převést $ i (basename $ i .jpg).png konec# Středníky fungují jako nové řádky:> pro i v * .jpg; konvertovat $ i (basename $ i .jpg).png; konec# ale víceřádkový formulář se pohodlně používá, protože # fish podporuje víceřádkovou historii a úpravy.# while-loop, číst řádky / etc / passwd a výstup pátý # pole oddělené dvojtečkou ze souboru. To by mělo být# popis uživatele.> zatímco číst čára soubor přílet (echo $ řádek|tr: n) echo $ arr[5] konec < / etc / passwd
Žádný implicitní subshell
Některé jazykové konstrukce, jako potrubí, funkce a smyčky, byly implementovány pomocí tzv. subshellů v jiných skořápka jazyky. Subshells jsou jednoduše podřízené programy, které spouští několik příkazů pro shell a poté končí. Bohužel tento detail implementace má obvykle vedlejší účinek, že jakékoli změny stavu provedené v subshellu, například přiřazení proměnných, se nerozšíří do hlavního shellu, což může uživatele překvapit. Ryba nikdy nerozvětvuje takzvané podškrty; všechny vestavěné jednotky jsou vždy plně funkční.
# To nebude fungovat v mnoha jiných skořápkách, protože vestavěné „čtení“# poběží ve vlastní subshellu. V Bash, pravá strana kanálu# nemůže mít žádné vedlejší účinky. V ksh funguje níže uvedený příkaz, ale# levá strana nemůže mít žádné vedlejší účinky. V rybách a zsh, obojí# strany mohou mít vedlejší účinky.> kočka * .txt | číst čára
Příklad proměnného přiřazení
Tento příklad Bash nedělá, jak vypadá: protože tělo smyčky je subshell, aktualizace na $ nalezeno
není trvalé.
nalezeno=''kočka / etc / fstab | zatímco číst dev mnt odpočinek; dělat -li test "$ mnt" = "/"; pak nalezeno="$ dev" fiHotovo
Řešení:
nalezeno=''zatímco číst dev mnt odpočinek; dělat -li test "$ mnt" = "/"; pak nalezeno="$ dev" fiHotovo etc / fstab
Ryby nepotřebují řešení:
soubor nalezeno ''kočka / etc / fstab | zatímco číst dev mnt odpočinek -li test "$ mnt" = "/" soubor nalezeno $ dev koneckonec
Užitečné chybové zprávy
Chybové zprávy v rybách jsou navrženy tak, aby uživateli řekly, co se stalo a co s tím lze udělat.[7]
> foo=barryba: Neznámý příkaz „foo = bar“. Měli jste na mysli „set VARIABLE VALUE”?Informace o nastavení hodnot proměnných najdete v části nápovědypříkaz set zadáním „help set“.> echo ${foo}barryba: Měli jste na mysli {$ VARIABLE}? Znak '$' začíná proměnnounázev. Závorka, která přímo následovala za $, není povolena jakočást názvu proměnné a názvy proměnných nemusí mít nula znakůdlouho. Chcete-li se dozvědět více o variabilní expanzi u ryb, zadejte „help“expand-variable “.> echo $(pwd)fish: Měli jste na mysli (COMMAND)? U ryb se používá pouze znak „$“pro přístup k proměnným. Další informace o nahrazování příkazů vryby, zadejte „help expand-command-substitution“.
Univerzální proměnné
Fish má funkci známou jako univerzální proměnné, které umožňují uživateli trvale přiřadit hodnotu proměnné napříč všemi běžícími mušlemi uživatele. Hodnotu proměnné si pamatují při odhlášení a restartu a aktualizace se okamžitě rozšíří na všechny spuštěné skořápky.
# Tím se emacs stane výchozím textovým editorem. „--Universal“ (nebo „-U“) říká rybám# udělejte z této univerzální proměnné.> soubor --universal EDITOR emacs# Tento příkaz udělá z aktuálního pracovního adresáře část ryby# výzva změní barvu na modrou na všech instancích běžících ryb.> soubor --universal fish_color_cwd modrá
Další funkce
- Pokročilé dokončení karty.
- Zvýraznění syntaxe s rozsáhlou kontrolou chyb.
- Podpora pro X Schránka.
- Chytrý terminál manipulace na základě terminfo.
- Prohledávatelné historie příkazů.
Verze 2 dodává:
- Autosugesions
- 256 barev terminálu
- Webová konfigurace
- Vylepšený výkon (tím, že má více vestavěných).
Tabulka překladu bash / ryb
Vlastnosti | Bashova syntaxe | rybí syntax | Komentář |
---|---|---|---|
variabilní expanze: s rozdělením slov a glob výklad | $ var nebo $ {var [@]} nebo $ {var [*]} | záměrně vynechán | Identifikována jako primární příčina chyb v jazycích prostředí kompatibilních s posix[8] |
variabilní expanze: skalární | „$ var“ | záměrně vynechán | Každá proměnná je pole |
variabilní expanze: pole | „$ {var [@]}“ | $ var | Citace není nutná k potlačení rozdělování slov a globálního výkladu. Místo toho citace znamená serializaci. |
variabilní expanze: jako řetězec oddělený mezerou | „$ {var [*]}“ | „$ var“ | |
dokončení historie | Ctrl+R | implicitní | |
substituce historie | !! | záměrně vynechán | Nelze zjistit |
explicitní subshell | (výraz) | výraz ryby -c | |
substituce příkazů | „$ (výraz)“ | (výraz) | |
substituce procesu | <(výraz) | (výraz | psub) | Příkaz, ne syntaxe |
logické operátory | ! cmd && echo SELHAT || echo OK | ne příkaza echo SELHATnebo echo OK | |
variabilní přiřazení | var = hodnota | soubor var hodnota | |
zpracování řetězce: nahradit | „$ {HOME / alice / bob}“ | řetězec nahradit alice bob $ HOME | |
zpracování řetězce: odstranit vzor předpony nebo přípony, nenásilně nebo chamtivě | var=a.b.c"${var#*.}" #před naším letopočtem"${var##*.}" #C"${var%.*}" # a.b"${var%%.*}" #A | řetězec nahradit --regex '.*?\.(.*)' '$1' a.b.c #před naším letopočtemřetězec nahradit --regex '.*\.(.*)' '$1' a.b.c #Cřetězec nahradit --regex '(.*)\..*' '$1' a.b.c # a.břetězec nahradit --regex '(.*?)\..*' '$1' a.b.c #A | |
exportní proměnná | export var | sada - export var | Možnosti zjistitelné po dokončení karty |
funkční proměnná | místní var | ve výchozím stavu | |
místní proměnná oboru | žádný ekvivalent | sada - lokální var | |
odstranit proměnnou | zrušit var | set --erase var | |
zkontrolujte, zda proměnná existuje | test -v var | sada - dotaz var | |
inicializace pole | var = (a b c) | soubor var a b c | Každá proměnná je pole |
iterace pole | pro jsem v "${var[@]}"; dělat echo "$ i"Hotovo | pro i v $ var echo $ ikonec | |
vektor argumentu: všechny argumenty | "$@" | $ argv | |
vektor argumentu: indexování | "$1" | $ argv [1] | |
vektor argumentu: délka | $# | (počet $ argv) | |
vektor argumentu: posun | posun | soubor --erase argv[1] | |
reprezentace pole v proměnných prostředí | CESTA="$ CESTA:$ DOMŮ/.local/bin " | soubor CESTA $ CESTA $ DOMŮ/.local/bin | fish předpokládá dvojtečku jako oddělovač pole pro překlad proměnných do az prostředí. To je v souladu s mnoha proměnnými prostředí podobnými poli, jako jsou $ PATH a $ LS_COLORS. |
exportovat a spustit | LANG = C.UTF-8 python3 | env LANG=C.UTF-8 python3 | env LANG=C.UTF-8 python3 funguje v libovolném prostředí, protože env je samostatný program. |
aritmetický | $((10/3)) | matematika '10 / 3 ' | expr 10 / 3 funguje v jakémkoli prostředí, protože expr je samostatný program. |
úniková sekvence | $ ' e' | E | printf 'E' pracuje v obou skořápkách; jejich printf vestavěné moduly jsou kompatibilní s GNU printf samostatný program.[9] |
řetězec s jednou uvozovkou: únikové sekvence | 'maminka'\'finální zpětné lomítko: ' | 'maminka\'konečné zpětné lomítko: \\' | Bash vyžaduje pouze nahrazení samotné nabídky v řetězcích s jednou uvozovkou, ale nahrazení má délku 4 znaky. Stejná náhrada funguje u ryb, ale ryba k tomu podporuje běžnou únikovou sekvenci, proto vyžaduje také únik zpětných lomítek (kromě povolení jednoduchých zpětných lomítek, která nepředcházejí jinému zpětnému lomítku nebo jednoduché citaci). |
Viz také
Reference
- ^ "členové týmu mušlí". GitHub.com. Citováno 2013-05-21.
- ^ [1] Poznámky k verzi pro ryby 3.1.2
- ^ fishshell.com Licence pro ryby
- ^ Linux Weekly News. Ryba - uživatelsky přívětivá skořápka. Citováno 2010-03-24.
- ^ Linux.com. CLI Magic: Vylepšení skořápky rybami. Citováno 2010-03-24.
- ^ Paul, Ryan. „Podrobný pohled na ryby: přátelská interaktivní skořápka“. Ars Technica. Citováno 10. března 2015.
syntaxe Posix má několik chybějících nebo špatně implementovaných funkcí, včetně rozsahu proměnných, polí a funkcí. Z tohoto důvodu bloudí ryby ze syntaxe Posix na několika důležitých místech.
- ^ Zacházejte s Linuxem. Bojíte se příkazového řádku? Vyzkoušejte ryby. Archivovány od originál dne 19. 7. 2012.
- ^ "Bash úskalí". Citováno 2016-07-10.
Tato stránka zobrazuje běžné chyby, kterých se programátoři Bash dopouštějí. (…) Zachráníte se před mnoha z těchto nástrah, pokud jednoduše vždy používáte uvozovky a nikdy nepoužíváte dělení slov z jakéhokoli důvodu! Rozdělení slov je nefunkční stará chyba zděděná z prostředí Bourne, které je ve výchozím nastavení přilepeno, pokud neuvádíte expanze. Drtivá většina úskalí nějakým způsobem souvisí s necitovanými expanzemi a následným rozdělením a globalizací slov, které z toho vyplývají.
- ^ "printf nepodporuje e". problémy s rybami. 11. července 2013. Citováno 24. března 2016.
externí odkazy
- Oficiální webové stránky - obsahující dokumentaci a soubory ke stažení
- Ryba na GitHub (aktivní)
- Ryba na Gitorious (zastaralý)
- Ryba na SourceForge (zastaralý)
- Uživatelé ryb - obecný diskusní seznam pro uživatele ryb
- Překladový slovník prostředí - další překladová tabulka Bash / Fish