Dažādas Linux sistēmas: pilnīgs un praktisks ceļvedis

Pēdējā atjaunošana: 27/02/2026
Autors: Isaac
  • Simbols "#!" norāda kodolam, kurš interpretētājs izpildīs skriptu, un tas var izmantot tādas čaulas kā bash, sh vai valodas kā Python un Perl.
  • Izvēle starp /bin/sh, /bin/bash vai /usr/bin/env ir atkarīga no tā, vai meklējat POSIX saderību, bash paplašinājumus vai lielāku pārnesamību.
  • Shebang efektivitāte mainās atkarībā no tā, vai skripts tiek izsaukts tieši, kā izpildāms fails vai ar "."/source, ietekmējot apakšapvalkus un vidi.
  • POSIX pāradresācijas, caurules un bash specifiskie operatori ļauj kontrolēt skriptu procesu ievadi, izvadi un kļūdas.

Shebang Linux skriptos

Sākot rakstīt skriptus GNU/Linux vidē, ir ļoti viegli apmaldīties slavenajā pirmajā rindā, kas sākas ar #!, tā sauktais "shebang", kas norāda, kurš interpretētājs izpildīs skriptuUn, protams, tiklīdz redzat piemērus ar / bin / bashciti ar / Bin / sh, daži ar /usr/bin/env python vai pat retākas līnijas, piemēram, #!/bin/sh –Tad rodas jautājums: ko man ievietot savos skriptos un kāpēc?

Turpmākajās rindās mēs rūpīgi izklāstīsim šo koncepciju Shebang, dažādie Linux pieejamie interpreteri, kad lietot katru variantu un kāda ir labākā prakse, kas jāievēroMēs arī redzēsim, kā tas ir saistīts ar POSIX, tādām distribūcijām kā Debian vai Ubuntu, kā izsaukt skriptus un tādām valodām kā Python, Perl vai AWK, lai jums būtu globāls un praktisks pārskats.

bash rokasgrāmata
Saistītais raksts:
Bash rokasgrāmata: pilnīga rokasgrāmata par skriptēšanu Linux vidē

Kas īsti ir "shebang" operētājsistēmā Linux?

Termins Shebang (vai hashbang) ir nosaukums, kas dots rakstzīmju secībai "#!", kas atrodas izpildāmā teksta faila pirmajā rindā Unix tipa sistēmās.Tās vienīgais mērķis ir norādīt kodolam, kuru programmu izmantot kā interpretētāju, lai lasītu un izpildītu šī faila saturu.

Lai gan vizuāli tas šķiet vienkāršs komentārs, Simbolu "#!" kombinācijai, kam seko absolūts ceļš uz izpildāmo failu, sistēmai ir īpaša nozīme.Piemēram, palaižot skriptu ar izpildes atļaujām ./script.shKodols nolasa pirmo rindu; ja tas atrod modeli #!, ņemiet vērā sekojošo kā tulka maršruts un iekšēji konstruē izsaukumu, kas ir līdzvērtīgs šī interpretētāja izpildei, nododot skriptu kā parametru.

No lingvistiskā viedokļa, Simbols "#" joprojām ir komentāra sākums tādām čaulām kā sh vai bash.Tāpēc šī rinda netiek interpretēta kā kods no paša skripta, bet tai ir nozīme tikai operētājsistēmai. Tāpēc, ja tā nav pirmajā rindā, tā tiek uzskatīta par parastu komentāru, un kodols to pilnībā ignorē.

Mehānisms ir vispārīgs: Shebang var izmantot ar jebkuru izpildāmo interpretatorune tikai ar gliemežvākiem. To bieži var redzēt ar Python, Perl, AWK, Ruby vai citas skriptvalodasTas ļauj tieši izsaukt failu, katru reizi neievadot valodas komandu.

Kā operētājsistēma uzvedas, izpildot skriptu ar shebang

Kad teksta failam ir izpildes atļaujas un jūs to izsaucat ar ./script_name argument1 argument2Kodols seko ļoti specifiskai secībai: Tas nolasa faila pirmo rindu, atrod "#!", identificē interpretatora ceļu un palaiž šo programmu, nododot tai skriptu un tā argumentus..

Praksē, ja jums ir izpildāms fails ar nosaukumu programma kura pirmā rinda ir #!/usr/bin/awk -f, izpildot ./programa arg1 arg2 Patiesībā sistēma palaiž kaut ko līdzvērtīgu /usr/bin/awk -f ./programa arg1 arg2Šo tulkošanu caurspīdīgi veic pats kodols, tāpēc jūs redzat tikai izpildāmo failu.

Šis pats mehānisms attiecas arī uz citām valodām: ja skriptā ir #!/usr/bin/env pythonSistēma izpildīs komandu "/usr/bin/env python", nododot skriptu kā pirmo argumentu..Env ir atbildīgs par Python interpretētāja atrašanu lietotāja ceļšTas padara šo pieeju ērtāku sistēmās ar dažādiem maršrutēšanas ceļiem.

Ir svarīgi to atzīmēt Šī funkcija ir daļa no Unix un Linux sistēmu uzvedības.Tādās vidēs kā MS Windows, kur sistēma izpildi saista ar faila paplašinājumu (piemēram, .exe), rinda ar "#!" tiek ignorēta, ja vien neizmantojat saderības slāņus vai specifiskas vides, piemēram, Cygwin vai WSL.

Komandu tulki un čaulu saimes

Šebangs tieši balstās uz atšķirīgo esamību komandu interpretētāji vai čaulas, kas ir instalētas GNU/Linux sistēmāApvalks ir programma, kas darbojas kā starpnieks starp lietotāju un sistēmu, apstrādājot komandas, mainīgos, funkcijas un vadības struktūras, ko mēs tai norādām, vai nu interaktīvi, vai izmantojot skriptu.

Unix pasaulē ir vairāki čaulu saimes ar līdzīgu sintaksi iekšpusēVisizplatītākā ģimene ir Bourne Shell (sh)kas radīja tādus atvasinājumus kā bash, dash, ksh, zsh vai ashŠīm čaulām ir liela daļa no to pamata sintakses, īpaši tā, ko definē POSIX standarts, lai gan katrai no tām ir savi paplašinājumi.

Šajā ģimenē, bash (Bourne Again Shell) ir noklusējuma čaula lielākajā daļā Linux distribūciju.Tas piedāvā daudzas papildu funkcijas (uzlabota vēsture, automātiskā pabeigšana, masīvi, struktūra) select(papildus operatori utt.) salīdzinājumā ar oriģinālo Bourne Shell. Tā tipiskie lietotāja konfigurācijas faili ir ~/.bashrc y ~/.bash_profile.

Vēl viens svarīgs spēlētājs ir dash (Debian Almquist Shell), ļoti viegls un ātrs apvalksar mazāk funkcijām nekā bash, bet vairāk atbilst POSIX standartam. Piemēram, Debian un Ubuntu vidēs /bin/sh Parasti tā ir simboliska saite uz /bin/dash, tieši tāpēc, lai sistēmas skripti (piemēram, sāknēšanas skripti) varētu gūt labumu no tā ātruma un mazāka patēriņa.

Mēs arī atradām ksh (Korn Shell), kas koncentrējas uz uzlabotām skriptēšanas funkcijām kas dažos gadījumos var konkurēt ar tādiem rīkiem kā awk vai perlUn citā ģimenē ir csh (C Shell) un tā atvasinājums tcsh, kurām raksturīga C valodai līdzīga sintakse, bet ar daudz mazāku lietojumu nekā Bourne tipa valodām.

  Informācija par Samsung One lietotāja saskarni: versijas, jaunās funkcijas un saderīgie tālruņi

/bin/sh loma un POSIX standarts

Viens no galvenajiem faktoriem, lai neapjuktu dažādos šebangos, ir saprast, ko tie patiesībā pārstāv. /bin/sh katrā sistēmā, un kāda loma visā šajā ir POSIX standartam?Vēsturiski oriģinālo Bourne Shell sauca /bin/sh un tas bija pieejams visās Unix versijās, līdz brīdim, kad tas kļuva par de facto standartu.

IEEE ņēma šo realitāti par pamatu specifikācijas definēšanai. POSIX 1003.2 (ISO 9945.2), kas apraksta standarta komandu valodu. Lielākā daļa Bourne saimes čaulu (bash, dash, ksh utt.) īsteno šo standartu.pievienojot īpašus paplašinājumus. Pateicoties tam, skriptu, kas rakstīts, ievērojot POSIX noteikumus sh, parasti var izpildīt bez problēmām jebkurā no šīm saderīgajām čaulām.

Mūsdienu GNU/Linux sistēmās Oriģinālā Bourne Shell vairs nepastāv, ir tikai ar to saderīgas implementācijas.Maršruts /bin/sh Tas tiek uzturēts kā simboliska saite uz vienu no šiem apvalkiem. Dažos izplatījumos tas norāda uz / bin / bash, savukārt Debian un Ubuntu tas parasti norāda uz /bin/dash, lēmums, ko motivē vēlme, lai sistēma rakstītu skriptus (#!/bin/sh) darbojas ar ātrāku un vieglāku interpretatoru.

Praktiskās sekas jums ir skaidras: ja tava shebanga ir #!/bin/sh Un, ja rakstāt skriptu, ievērojot POSIX, jums vajadzētu būt iespējai to pareizi palaist ar dash, bash vai ksh.Ja tā vietā izmantojat bash paša paplašinājumus (piemēram, noteikta veida ciklus, masīvus vai operatorus) (piemēram, lai skripti ar opciju izvēlnēm), jums vajadzētu izmantot skaidri #!/bin/bash vai līdzvērtīgs, pamatojoties uz env.

Tāpēc daudzi ceļveži to iesaka sistēmas un vispārējas nozīmes skriptu izmantošana #!/bin/sh ar POSIX sintaksi, savukārt personīgie vai lietotāja skripti, kas ir atkarīgi no konkrētām bash funkcijām, skaidri norāda /bin/bash šebanga rindā.

Šebanga piemēri dažādiem tulkiem

Balstoties uz iepriekš minēto, ir viegli saprast, kāpēc mēs atrodam dažādus shebang variantus. Visizplatītākās Linux čaulās ir šādas rindas: #!/bin/bash, #!/bin/dash, #!/bin/zsh, #!/bin/tcsh o #!/bin/cshKatrs no tiem norāda, ka skripts jālasa citam čaulam ar savām sintaktiskajām īpatnībām.

Daudzās sistēmās, bash pēc noklusējuma ir instalēts /bin/bashTātad rinda:

#!/bin/bash

Tas liek kodolam izsaukt šo konkrēto izpildāmo failu. Tā ir ierastā opcija, ja vēlaties izmantot noteiktas bash iespējas. kā dabiski indeksēti masīvi, cikls for (( ))struktūra select un garš utt. paplašinājumu klāsts, kas nav pieejams minimālā POSIX sh.

Jūs varētu sastapties arī ar šebangu kā #!/usr/bin/perl, #!/usr/bin/env python3 o #!/usr/bin/env awkŠādos gadījumos skripts nav paredzēts lasīšanai ar čaulu, bet gan ar citas skriptvalodasFilozofija ir tāda pati: pirmajā rindā norādīts, kura programma tiks izmantota faila satura interpretēšanai.

Piemēram, izmantojot AWK, izpildāms skripts, kas sākas ar:

#!/usr/bin/awk -f

Sistēma to apstrādās kā AWK komandu failu un darbosies tā, it kā jūs to būtu izsaucis tieši. /usr/bin/awk -f script.awkŠis modelis ir identisks Perl, Python un citām izplatītām valodām Unix vidē.

Tipiski shebangi Bash un Shell skriptos: plusi un mīnusi

Viena no biežākajām dilemmām, rakstot skriptus, ir izvēle starp #!/usr/bin/env bash, #!/bin/bash, #!/bin/sh vai līdzīgi variantiNav vienas atbildes, kas derētu visam, taču katram gadījumam ir saprātīgi kritēriji.

kad lietojat #!/bin/bash Jūs tieši nosakāt absolūto ceļu uz interpretētāju. Tas ir vienkārši, paredzami un labi darbojas lielākajā daļā darbvirsmas vai servera GNU/Linux distribūciju.kur bash parasti ir pieejams šajā atrašanās vietā. Negatīvā puse ir tā, ka dažās eksotiskākās vai minimālistiskākās vidēs šis ceļš var nepastāvēt.

Turklāt, #!/usr/bin/env bash deleģē programmai env uzdevumu atrast bash bināro failu lietotāja PATHŠī pieeja ir vieglāk pārnesama dažādās sistēmās (piemēram, macOS, BSD vai pielāgotās instalācijās), jo tā nepieņem fiksētu ceļu, bet gan paļaujas uz to, ka bash ir pieejams PATH. Savukārt tā ir atkarīga no... /usr/bin/env jā, tas pastāv, kaut kas gandrīz universāls, bet ne absolūti garantēts.

Attiecībā uz #!/bin/shDoma ir tieši pretēja: Nepiespiediet bash, bet gan deklarējiet, ka skripts atbilst POSIX standartam un to var izpildīt ar sistēmas "noklusējuma" čaulu.Debian un Ubuntu vidē tas būs dash; citās distribūcijās tas var būt bash vai cits čaulas interfeiss. Tā ir ieteicamā opcija, ja meklējat maksimāla saderība, ātrums un atbilstība standartam, ja vien jūs pieturaties pie POSIX sintaksi.

Variants #!/bin/sh - Viņš piebilst niansi: šis skripts var kalpot par sākumpunktu tulkam ar noteiktām iespējām, piemēram netiek ielādēti interaktīvie startēšanas faili vai netiek aktivizēti konkrēti režīmi (atkarībā no konkrētās čaulas). Tas ir retāk sastopams parastos skriptos, bet to var redzēt ļoti kontrolētos kontekstos.

Atšķirības starp POSIX sintaksi un bash paplašinājumiem

Galvenais, izvēloties pareizo shebangu, ir zināt Kādu sintaksi tu īsti izmanto savā skriptā?Divi piemēri ļoti labi ilustrē atšķirību starp rakstīšanu tīrā POSIX valodā vai rakstīšanu, izmantojot bash paplašinājumus.

Cilpa for Pilnībā POSIX saderīgs varētu izskatīties apmēram šādi:

#!/bin/sh
for VAR in 0 1 2 3
do
   echo "$VAR"
done

Šāda veida konstrukcija ir viegli saprotama, sh, dash, bash un jebkura čaula, kas ievieš POSIX standartuIr loģiski to pavadīt ar vispārīgu šebangu, piemēram, #!/bin/shlai jūs varētu izmantot čaulas priekšrocības, ko sistēma uzskata par piemērotu.

Turpretī bash piedāvā skaitlisku ciklu stilu, kas ir tuvāks C līdzīgām valodām:

#!/bin/bash
for (( VAR=0; VAR<4; VAR++ ))
do
   echo "$VAR"
done

Šī sintakse ar for (( )) Tas nav POSIX standarta sastāvdaļa, un to nesaprot minimālie čaulas, piemēram, dash.Ja palaižat šo skriptu ar /bin/dash script_bash.sh jūs saņemsiet sintakses kļūdas, savukārt ar /bin/bash script_bash.sh Tas darbosies perfekti.

  Kā lietot mākslīgo intelektu (AI) ONLYOFFICE operētājsistēmā Linux

Tādējādi, Ikreiz, kad izmantojat noteiktas bash funkcijas, tās ir skaidri jādeklarē shebang., tā vietā, lai izmantotu #!/bin/shPretējā gadījumā jūsu skripts var klusējot neizdoties sistēmās, kas sh izmanto stingru POSIX čaulu.

Kā šebangs ietekmē skripta izsaukšanas metodi

Šebanga efekts nav vienāds visās skripta izsaukšanas formās. Atkarībā no tā, vai skriptu izsaucat tieši caur čaulu, palaižat to kā failu vai "importējat" to ar punktu, darbība mainās..

Ja izmantojat izsaukšanu nepārprotamiPiemēram:

/bin/sh script_ejemplo.sh
/bin/dash script_ejemplo.sh
/bin/bash script_ejemplo.sh

Šebangs tiek ignorēts. Apvalks, ko ierakstījāt komandas sākumā, tiks izmantots skripta interpretēšanai.Neatkarīgi no faila pirmās rindas. Tādā veidā jūs varat pārbaudīt vienu un to pašu skriptu ar dažādiem čaulām, lai redzētu, vai tas atbilst POSIX standartam vai izmanto paplašinājumus no konkrētas čaulas.

Ar izsaukšanu netiešs, kad jūs palaižat tieši ./script_ejemplo.sh pēc tam, kad viņam bija piešķirtas izpildes atļaujas, Kodols aplūko šebanga rindiņu lai izlemtu, kura programma palaidīs saturu. Šajā gadījumā a apakšapvalks vai bērna process no pašreizējās čaulas, kas būs interpretētājs, kas lasīs skriptu.

Ir arī piesaukšana ar punkts (.) vai source bash valodā, tāds, ka:

. script_ejemplo.sh

Šajā režīmā Skripts nedarbojas bērnu procesā, bet gan pašreizējā čaulā.Tas nozīmē, ka visi skripta veiktie mainīgie, funkcijas un vides izmaiņas tieši ietekmēs jūsu pašreizējo sesiju. Tādā gadījumā, arī šebangs tiek ignorētsjo netiek laists klajā jauns izpildītājs.

Tam visam ir svarīgas praktiskas sekas: Atkarībā no tā, kā jūs izsaucat skriptu, faktiskais lietotājs un procesa, kas to izpilda, atļaujas var mainīties vai nemainīties.Ja izsaucat skriptu no čaulas ar parastu lietotāju, bērnu process mantos šo lietotāju un, piemēram, nevarēs modificēt aizsargātus failus, piemēram, /etc/passwdja vien kaut kas cits netiek piespiests, izmantojot tādus mehānismus kā su -c vai tamlīdzīgi.

Šebangas lietošana reālos rakstos

Veidojot skriptu no nulles operētājsistēmā Linux, parasti tiek izmantota šāda prakse: Vienmēr sāciet ar īso rindiņu, kas skaidri norāda tulku, kuru vēlaties izmantot.Piemēram, ja rakstāt vienkāršu bash skriptu reklāmkaroga parādīšanai, varat izveidot failu mi_script.sh Tātad:

#!/bin/bash
echo "Contenido de mi script"

Kad fails ir saglabāts, nākamais solis ir piešķiriet tai izpildes atļaujas ar šādu komandu chmod +x mi_script.shNo šī brīža jūs varat to vienkārši palaist, izmantojot ./mi_script.sh no direktorijas, kurā tas atrodas, ja vien jūsu ceļš un atļaujas to atļauj.

Ja vēlaties izmantot stingru POSIX apvalku, varat mainīt pirmo rindu uz #!/bin/sh un uzrakstiet skripta saturu saderīgā formātā. Tas ir īpaši noderīgi skriptiem, kurus vēlaties atkārtoti izmantot daudzās dažādās sistēmās, tostarp sāknēšanas vidēs vai skriptos sadaļā /etc/init.d/ kur šī pieeja tiek plaši izmantota.

Ļoti izplatīta alternatīva, īpaši tādās valodās kā Python, ir izmantot #!/usr/bin/env python3Ideja šeit ir ļaut env Atrodiet Python 3 izpildāmo failu savā PATH un palaidiet to. Tas ļauj izvairīties no paļaušanās uz to, ka tulks precīzi atbilst patiesībai. /usr/bin/python3Tas var atšķirties atkarībā no izplatīšanas vai vides..

Līdzīgi, skriptus var izveidot Perl, AWK vai pat retāk sastopamās čaulās, ja vien ceļš (vai komanda ar env), ko ievietojat shebang rindā, norāda uz faktisku izpildāmo failu sistēmā, kurā tas tiks palaists.

Labākā prakse, izvēloties un rakstot šebangu

Lai padarītu skriptus viegli pārvaldāmus, uzturējamus un pārnēsājamus, ieteicams ievērot virkni norādījumu Labākā prakse, rakstot shebang rindiņu un konfigurējot atļaujasŠīs ir vienkāršas detaļas, kas vēlāk novērsīs daudzas galvassāpes.

Pirmā lieta ir Vienmēr norādiet atbilstošo interpretētāju valodai vai čaulai, kuru lietojat.Ja skripts ir rakstīts bash valodā un izmanto noteiktus paplašinājumus, neiekļaujiet #!/bin/shJa tā ir Python 3, neizmantojiet tikai python Ja jūsu sistēmā šī komanda palaiž Python 2, pielāgojiet rindu, lai tā atspoguļotu faktisko kodu.

Parasti ir vēlams Piemēram, izmantojiet absolūtos ceļus šebangā /bin/bash o /usr/bin/python3, lai izvairītos no neskaidrībāmTomēr, ja vēlaties maksimālu pārnesamību starp heterogēnām sistēmām, tehniku /usr/bin/env tas ir ļoti noderīgijo tas meklē interpretētāju PATH un ir labāk piemērots vidēm, kurās jūs nekontrolējat precīzu instalēšanu.

Vēl viens būtisks punkts ir Vienmēr atcerieties padarīt skriptu failus izpildāmus ar chmod +xLai gan jūs varat tos izsaukt, tieši izsaucot tulku (piemēram, bash script.shPiešķirot tiem izpildes atļauju, tie var darboties kā jebkura cita sistēmas komanda, it īpaši, ja pievienojat to direktoriju savam ceļam (piemēram, ~/scripts).

No organizatoriskā viedokļa tas ir ļoti ieteicams saglabājiet savus skriptus īpašā direktorijā~/bin o ~/scriptsun pievienojiet to lietotāja PATH. Tas novērš izpildāmo failu izkaisīšanu pa visu pasauli un nodrošina pieredzi, kas līdzīga "oficiālo" komandu lietošanai.

Visbeidzot, lai gan tas nav tieši saistīts ar šebangu, Pareiza koda komentēšana skriptā atvieglo tā izpratni nākotnē.Pievienojot komentārus par skripta darbību, pieņēmumiem par vidi un izmantoto konkrēto čaulas sintaksi, var ātri izlemt, kura shēma ir vispiemērotākā, ja kādreiz tā būs jāmaina.

Pāradresācijas, deskriptori un to saistība ar čaulu

Lai pilnībā izprastu, kā darbojas čaulas, un līdz ar to arī daudzus skriptus, kas izmanto shebang, ir noderīgi pārskatīt, kā Linux saista sistēmas resursus ar failiem un deskriptoriemŠajā modelī gandrīz viss ir pieejams kā fails: direktoriji, ierīces, ligzdas, procesi, pseidofaili. /proc o /dev, Uc

  Kā izveidot Linux nodalījumus operētājsistēmā Windows 11 un iestatīt divkāršu sāknēšanu

Kad process vēlas lasīt no resursa vai tajā rakstīt, tam ir jāatver atbilstošais fails ar sistēmas izsaukumu. iegūstot faila deskriptoru, kas ir vienkārši vesels skaitlisŠis skaitlis identificē saistību starp procesu un resursu. Katram procesam ir sava deskriptoru tabula, kas ir pieejama, piemēram, izmantojot /proc/PID/fd/.

Pēc vienošanās jebkuram procesam parasti ir trīs īpaši deskriptori: 0 (standarta ieeja), 1 (standarta izeja) un 2 (standarta kļūdas izeja)Terminālī izmantotais čaula nosaka, ka deskriptors 0 norāda uz tastatūru, bet 1 un 2 norāda uz ekrānu. Lielākā daļa POSIX komandu ir rakstītas tā, lai lasītu no standarta ievades (deskriptors 0) un rakstītu standarta izvadē (1) vai kļūdas izvadē (2).

Kad palaižat komandu no čaulas, Bērnu process manto šo deskriptoru 0, 1 un 2 saistību no vecāku procesa.Ja vien netiek darīts kaut kas tiešs, lai tos mainītu. Tieši no tā izriet pāradresāciju jauda: pirms bērna procesa palaišanas varat lūgt čaulai atkārtoti piešķirt šos deskriptorus failiem vai citiem resursiem.

Lai modificētu pašreizējās čaulas deskriptorus, tiek izmantota komanda execļaujot saistīt deskriptoru ar failu lasīšanai, rakstīšanai vai abiem mērķiem, dublēt deskriptorus vai aizvērt tos. Piemēram, exec 4< /tmp/fichero saista čaulas deskriptoru 4 ar /tmp/fichero lasīšanai, lai vēlāk varētu to izdarīt ls >&4 lai nosūtītu izvadi ls šim deskriptoram.

POSIX pāradresācijas komandās un skriptos ar shebang

Atsevišķu komandu līmenī (un līdz ar to jebkurā skriptā, lai kāds tas būtu shebang), POSIX pāradresācijas ļauj deklaratīvi mainīt, kurš fails vai resurss ir saistīts ar katru deskriptoru bērna procesā.Pamata sintakse ir šāda:

comando op fichero_o_descriptor

kur n ir deskriptors (0, 1, 2 utt.), op ir pāradresācijas operators (<, >, >>, <&, >&utt.) un file_or_descriptor ir mērķa ceļš vai deskriptorsJa jūs izlaižat n, tiek ņemtas noklusējuma vērtības (0 ievadei, 1 izvadei).

Ienākošās pāradresācijas (<) liek komandai lasīt no faila, nevis no standarta ievades. Piemēram, cat < fichero padara "file" par standarta ievades veidu funkcijai cat, kas turpinās rakstīt uz standarta izvadi (ekrānu).

Izejošie pāradresējumi (> y >>) nosūta standarta izvadi uz failu, saīsinot tā iepriekšējo saturu (>) vai pievienojot beigās (>>Apvienojumā ar 2> o 2>&1Tie arī ļauj novirzīt kļūdu ziņojumus. Rakstos ar vārdu "shebang" ir ļoti bieži redzēt šādas rindas. ls -l /bin/bash ./script > fichero 2>&1 lai grupētu normālu un kļūdu izvadi vienā failā.

Ir arī t.s Šeit-dokumenti, kas ir rakstīti ar << delimitador un ļauj ievietot iegulto tekstu tieši pašā skriptā. Viss, ko ierakstāt līdz atdalītājam, kļūst par komandas standarta ievadi.. Piemēram:

cat << END > fichero

Tas padarīs visu ierakstītu līdz rindai, kurā ir tikai END tiek glabāts ficheroŠī metode tiek plaši izmantota shebang skriptos, lai ģenerētu konfigurācijas failus vai garus teksta blokus, manuāli neveidojot pagaidu failus.

Bash specifisko cauruļu un operatoru izmantošana

Vēl viens svarīgs mehānisms ir caurule vai cauruļvads, ko attēlo operators "|"Kad raksti kaut ko līdzīgu comando1 | comando2Apvalks saista standarta izvadi ar comando1 ar standarta ievadi comando2, tā ka Informācija plūst no viena procesa uz otru, neizmantojot starpfailus..

Šis modelis ir tik iesakņojies, ka to lieto gandrīz nedomājot: ls | more nosūtīt ls ģenerēto sarakstu uz vairākkas to attēlo ekrānā, lapojot to. Skriptā ar POSIX vai bash shebang semantika ir tāda pati; vienīgā lieta, kas mainās, ir tā, kura čaula interpretē cauruli.

Papildus POSIX definētajiem operatoriem bash pievieno dažus savus īsceļus kombinētajām novirzīšanām. Piemēram, cmd &> fichero o cmd >& fichero Tie izraisa gan standarta izvades, gan kļūdas izvades novirzīšanu uz vienu un to pašu failu, kas ir līdzvērtīgs cmd > fichero 2>&1Šīs saīsinātās formas nav pārnesamas uz visām POSIX čaulām, tāpēc Ja tos izmantojat, jums jāpārliecinās, vai “shebang” skaidri norāda uz “bash”..

Viena no smalkākajām detaļām, strādājot ar pāradresācijām skriptos, ir secība. Pirms komandas izpildes čaula analizē pāradresācijas no kreisās uz labo pusi.Mainot savu pozīciju, rezultāts var tikt būtiski mainīts, kā redzams tādos piemēros kā ls /tmp 2> file 1>&2 priekšā 1>&2 ls /tmp 2> file.

Kad vēlaties pilnībā atbrīvoties no informācijas, ir klasiski ķerties pie nulles fails /dev/nullkas darbojas kā "melnais caurums" izejai. Piemēram, ls -l /usr > /dev/null 2>&1 Tas pazūd standarta izvadi un kļūdu izvadi, kas ir ļoti izplatīta parādība skriptiem, kuriem nevajadzētu parādīt neko citu kā vien kritisku kļūmi.

Kopumā laba izpratne par koncepciju Shebang, atšķirības starp /bin/sh un /bin/bash, POSIX loma, dažādie pieejamie interpretētāji un pāradresācijas un cauruļu iespējas Tas ļauj rakstīt daudz robustākus un pārnēsājamākus skriptus. Ja rūpīgi izvēlaties sākuma rindiņu, ievērojat pareizo katras čaulas sintaksi un uzturat stabilu izpildlaika vidi, jūsu skripti darbosies paredzami lielākajā daļā GNU/Linux un Unix sistēmu, sākot no vienkāršiem skriptiem jūsu mājas direktorijā līdz sarežģītām sistēmas sāknēšanas rutīnām.