Az shfmt használata a parancsfájlok jobb formázásához – CloudSavvy IT

Avatar admin | 2021.03.31. 18 Views 0 Likes 0 Ratings

18 Views 0 Ratings Rate it

Bash Shell

Igen, a formázás szükséges, és óriási segítséget nyújt az összetett kód megértésében. Azok számára, akik gyakran írnak shell parancsfájlokat, a formázás kétszeres ellenőrzése unalmas feladattá válhat. Ez a cikk megmutatja, hogyan lehet a parancsikonra váltani az shfmt használatával!

Mi a shfmt?

Dustin Krysak fejlesztette ki, az shfmt egy Shell formázó, elemző és tolmács. Maga a projekt az házigazdája a GitHub és világos README és tisztán bemutatott tárháza van. Az eszközt a Go fejlesztette ki, és támogatja a POSIX, Bash és mksh héjakat. Ezzel az shfmt valóban univerzális program lesz, ahelyett, hogy csak Bash-ra korlátozódna.

Telepítés shfmt

Telepíteni shfmt a snap-kompatibilis Linux disztribúción (például az Ubuntu és a Mint) hajtsa végre a következő parancsot a terminálon:

sudo snap install shfmt

Az shfmt telepítése kattintással

Telepíteni shfmt RedHat / Yum alapú Linux disztribúción (például az RHEL, a Centos és a Fedora) hajtsa végre a következő parancsokat a terminálján:

Megjegyzés: Az első parancs végrehajtása és a következő parancsok végrehajtása előtt újra kell indítania a gépet (vagy kijelentkezni és újra bejelentkezni).

sudo dnf install snapd
sudo snap install snap-store
sudo snap install shfmt

Lehetséges, hogy az RHEL-re és a Centos-ra is telepítenie kell a Először az EPEL adattár.

Az shfmt használatával

Az egyik a snap csomag telepítve van, elkezdheti az shfmt használatát.

shfmt - kompakt eszköz a Shell formázásához

Határozzunk meg egy nagyon rosszul formázott és írott szkriptet test.sh alábbiak szerint:

#!/bin/bash__
 echo 'not well formatted line 1'
  echo 'not well formatted line 2'
echo 'this line has extra spaces on the end > '            
func() {
  echo 'more unneeded spaces'
              echo 'way out'
 }
func ()

Ennek a szkriptnek több kérdése van, a legfontosabb a formázása. De van egy hiba / hiba is a szkriptben: A függvényhívás func az utolsó sort további zárójelek követik. A Bash-ban található függvényhívásnak (a funkciódefiníció helyett) csak a neve legyen, a zárójelek nem. Kicsit magasabb, hogy a megfelelő funkciódefiníció megtörtént.

Lássuk mit shfmt erre gondol.

shfmt test.sh

Praktikus példa a hibás függvényhívás hibájával rendelkező shfmt-re

Míg a kimenet kissé rejtélyesnek tűnik, vegye figyelembe, hogy a kifejezés foo (itt használt) és bar (itt most nem használják) gyakran használják az informatikai körökben, hogy hasonló idiómát vagy elemet jelöljenek / képviseljenek. foo itt valóban utal func.

Az üzenet akkor is kissé rejtélyes marad, amíg az utolsó sort nézve rájövünk, hogy ami valójában történik, az a függvénydefiníció kezdete (és nem a függvényhívás), mert a két zárójelet tartalmazta. Ez aztán megmagyarázza, hogy az üzenet miért mondja el, hogy még valami várható; nyilatkozatot kell követnie. shmft valami ilyesmit keres itt func(){ some_command[s]; }.

Bingó! Ez növeli a shfmt hogy shell script érvényesítő / ellenőrző eszköz legyen, bár valószínűleg közel sem olyan átfogó, mint amiről írtunk A shellcheck használatával megkeresheti és kijavíthatja a szkriptelési hibákat. Mégis, nagyon hasznos!

Javítjuk a hibánkat, és most a beviteli szkriptet test.sh a következőképpen szól:

#!/bin/bash__
 echo 'not well formatted line 1'
  echo 'not well formatted line 2'
echo 'this line has extra spaces on the end > '            
func() {
  echo 'more unneeded spaces'
              echo 'way out'
 }
func

Ismét kivégezzük shfmt kóddal szemben, és sokkal megfelelőbb, jól formázott kimenetet kap:

Két szóköz behúzása shfmt-vel az -i kapcsolóval

Nagy. Ezt az egy szintet tovább tudjuk vinni, és jelezhetjük shfmt hogy a teljes fül helyett két szóköz behúzását / fülét szeretnénk használni. Mindig két szóközt használok behúzásként / fül szélességként két szóköz használatával, és használok egy további szóközt, ahol a következő sorban lévő parancs szorosan kapcsolódik az előzőhöz, például egy folytatott parancs stb., Bár ez nem gyakran fordul elő. Több mint 10 év alatt azt tapasztaltam, hogy a két tér a személyes és a közös projekt ideális.

Mindenkinek és minden projektnek meg kell találnia a maga ideális szintaxisát, de vegye figyelembe, hogy ha egy nagy lapot (8 szóközt) használ, mint például a shfmt a fenti példában a kódod nehezebben olvasható lesz.

A behúzás / fül szélességét két szóközre állítjuk a -i opció (amely a --help úgy definiálja behúzás: 0 a füleknél (alapértelmezett),> 0 a szóközök számához): shfmt -i 2 test.sh amely a következő módon jeleníti meg a szkriptet:

#!/bin/bash__
echo 'not well formatted line 1'
echo 'not well formatted line 2'
echo 'this line has extra spaces on the end > '
func() {
  echo 'more unneeded spaces'
  echo 'way out'
}
func

Nagy! Azt azonban megjegyezzük shfmt nem vette át a szándékos hibánkat: #!/bin/bash__ nem helyes, és el kell olvasnia #!/bin/bash helyette.

Az shfmt és a shellcheck hiba is hiányzott

Így továbbra is létezik felhasználási eset shellcheck hogy szkript hibákat találjon a használat mellett shfmt hogy a szkripteket jobban formázza. Érdekes módon azonban ebben a konkrét esetben még shellcheck nem vette észre a kérdést. Ezt a hiányosságot jelentették a shellcheck csapatnak, így a megfelelő időben ez kijavítható.

Ha többet szeretne megtudni a Linuxról, akkor tekintse át a Bash Automation & Scripting Basics sorozat, valamint a Bash Loops: for, while és amíg Bash Loops: for, while és amíg és Változók exportálása a Bash-ban: a Miért és hogyan cikkeket.

Csomagolás

A tiszta, jól formázott és hibamentes parancsfájlok írása egyszerűbbé válik, ha olyan shell-formázó eszközt használ, mint például shfmt és egy hibajavítót shellcheck. Még akkor is, amint láttuk, néhány dolog észrevétlen maradhat, egészen a pillanatig, amikor először futtatja a szkriptet. shfmt egy kicsi, de hatékony segédprogram, amely segít a szkriptek és a kód formázásában a kiválasztott behúzásokkal összhangban. Élvezd!


Source link


18 Views 0 Ratings Rate it

  • Minden jog fenntartva 2019-2020. Hogyankészítsek.Hu Impresszum Adatkezelési szabályok