Kāda ir atšķirība starp bash skripta palaišanu, izmantojot sh un ./

Šis pats jautājums var rasties, izmantojot jebkura veida skriptus, ne tikai bash. Vai ir liela atšķirība starp skripta palaišanu caur tulku un tā palaišanu tieši?

Vēl viens noslēpums, ko mēs atklāsim šajā interesantajā ziņojumā no Let's Use Linux (uL).


Palaižot skriptu, nododot skripta faila nosaukumu tulkotājam (sh, python, perl utt.), Jūs faktiski izpildāt tulku, nododot programmu, kuru vēlaties izpildīt kā argumentu. Piemēram, palaižam tulku sh, nododot tam argumentu miscript.sh.

sh myscript.sh

Ja palaižat skriptu pats, sistēma izsauks vajadzīgo tulku un, jā, tā izpildīs skriptu, nododot to kā argumentu tulkotājam, taču tas viss notiks automātiski un bez lietotāja, kurš izpildīja skriptu.

./myscript.sh

Lai pats palaistu skriptu, ir jāievēro 2 nosacījumi:

1) skriptā jāiekļauj "sprādziena līnija". Šī ir skripta pirmā rinda, kurai jāsākas ar rakstzīmēm #! un ka jums jānorāda ceļš, kur atrodas tulks. Ir svarīgi atzīmēt, ka šis nosacījums attiecas uz jebkura veida skriptiem (python, perl utt.), Ne tikai tiem, kas nāk no bash.

Tā, piemēram, mūsu skripta pirmajā rindiņā jābūt šādai:

#! / bin / bash

2) failam jābūt izpildītām atļaujām:

Lai piešķirtu izpildes atļaujas mūsu skriptam, mums jāraksta:

chmod a + x miscript.sh

Gatavs, tagad vienkārši palaidiet to šādi:

./myscript.sh

Vai arī kopējot skriptu uz "īpaša" ceļa, kas ļauj to viegli izsaukt. Piemēram, mēs varam to kopēt uz / usr / sbin un palaist no jebkuras vietas, neiekļaujot pilnu ceļu, kur tas atrodas:

Mēs kopējam:

sudo cp miscript.sh / usr / sbin / miscript

Mēs izpildām:

nepareizs uzraksts

Kā redzat, patiesībā tas, kas notiek aiz ainas, abos gadījumos ir ļoti līdzīgs. Tomēr, iekļaujot "sprādziena līniju", jūsu skriptus būs daudz vieglāk izplatīt, jo lietotājiem nebūs jāatceras ceļš, kur atrodas nepieciešamie tulki, lai varētu tos izpildīt. Secinājums: būtībā tas ir komforta jautājums.


Atstājiet savu komentāru

Jūsu e-pasta adrese netiks publicēta. Obligātie lauki ir atzīmēti ar *

*

*

  1. Atbildīgais par datiem: Migels Ángels Gatóns
  2. Datu mērķis: SPAM kontrole, komentāru pārvaldība.
  3. Legitimācija: jūsu piekrišana
  4. Datu paziņošana: Dati netiks paziņoti trešām personām, izņemot juridiskus pienākumus.
  5. Datu glabāšana: datu bāze, ko mitina Occentus Networks (ES)
  6. Tiesības: jebkurā laikā varat ierobežot, atjaunot un dzēst savu informāciju.

  1.   Osvaldo Villarroels teica

    Es piekrītu jums, Erpower, gan tulka versija, gan tā ceļš ir mainīgi un nav nemainīgi, vēl jo vairāk, ja tiek uzskatīts, ka GNU / Linux izplatījumi nav vienīgie, kas izmanto Bash (ir arī: freeBSD, OpenSolaris , Mac), un daudziem no tiem ir atšķirīga konfigurācija vai maršruti.

    Svarīgi ir zināt, ka jums ir elastība (kā jūs labi pieminējāt), lai spēlētu ar zvanu uz skriptu vai nu ar ./ ​​vai ar sh (vai python ... utt.)

  2.   he_who_knows@gmail.com teica

    Bash ir datorprogramma, kuras funkcija ir interpretēt pasūtījumus.

    Tas ir balstīts uz Unix apvalku un ir saderīgs ar POSIX.

    tā vietā sh ir datorprogramma, kuras funkcija ir interpretēt pasūtījumus.
    Iekļautas tādas funkcijas kā procesa vadība, novirzīšana
    ievade / izvade, failu saraksts un lasīšana, aizsardzība,
    sakari un komandu valoda programmu rakstīšanai, izmantojot
    partijas vai skripti. Tas bija tulks, kas tika izmantots pirmajās Unix versijās, un tas kļuva par de facto standartu.

  3.   Diāna C teica

    Sveiki, es esmu iesācējs skriptu lietošanā, un es vēlētos uzzināt, vai kāds var man palīdzēt ar problēmu, kas man ir:

    Es vadu programmu, kurai caur konsoli ir jāiekļauj vairāki sākotnējie dati, un es uzzināju, ka caur skriptu ir iespējams izpildīt programmu ar sākotnējiem datiem, lai, kad es to darītu, nevajadzētu to rakstīt vēl un vēl. nepieciešams izpildīt programmu.

    Es nezinu, kā to izdarīt, tāpēc, ja kāds man var palīdzēt, es būšu ļoti pateicīgs.

  4.   Izmantosim Linux teica

    Skatiet, tas ir atkarīgs no tā, kādā programmēšanas valodā jūs rakstāt skriptu. Tomēr jebkurā gadījumā jums ir nepieciešams:

    1) Ja vēlaties, lai lietotājam šie dati būtu jāievada ikreiz, kad tiek izpildīts skripts, visizplatītākā procedūra ir tāda, ka mainīgais ņem ievades ievadītās vērtības.

    2) Gadījumā, ja vērtības vienmēr ir vienādas, varat izmantot konstantes.

    3) Vēl viena iespēja ir iespēja, ka skripts var ņemt parametrus.

    Priekā! Pāvils.

  5.   Izmantosim Linux teica

    Tas ir interesanti, ko jūs pieminat. To sauc par 2 veidiem: shebang līnija vai tieši sprādziena līnija. Es jums sniedzu informāciju: http://python.about.com/od/programmingglossary/g/defbangline.htm
    Priekā! Pāvils.

  6.   @llomellamomario teica

    Interesanti, ka es nekad nebiju apstājusies, lai domātu par šo detaļu. Būtu interesanti redzēt vairāk rakstu par konsoler retušēšanu, tostarp slaveno kodola pārkompilēšanu, lai noņemtu nevajadzīgos kilogramus koda, kas ir tikai saderībai un sistēmas ātruma uzlabošanai.

  7.   Izmantosim Linux teica

    LABI. Es to paturēšu prātā.
    Priekā! Pāvils.

  8.   Izmantosim Linux teica

    Es priecājos, ka tas izdevās. Es vienmēr cenšos izlikt lietas, kas, manuprāt, varētu būt interesantas un praktiskas.
    Apskāviens! Pāvils.

  9.   Felikss Manuels Brito Amarante teica

    Katrs programmētājs ar labiem ieradumiem pievieno koda pirmajai rindai "sprādziena līniju". Programmā Python es nekad neaizmirstu kodēšanu un sprādziena līniju.
    #! / usr / bin / python2.7
    # *. * kodējums = utf-8 *. *

  10.   diex02 teica

    Lieliski, cerams, ka jūs varat publicēt vairāk informācijas par komandrindu, it īpaši attiecībā uz kompilēšanu vai instalēšanu no avota failiem (tar.gz utt.)

  11.   Džo di Kastro teica

    Es nekad nebiju dzirdējis par "sprādziena līniju", es vienmēr to esmu pazīstams kā Šebangu

    http://en.wikipedia.org/wiki/Shebang_%28Unix%29

    Sveicieni

  12.   Jonathan Fernandez teica

    interesanta piezīme ... paldies!

  13.   eM Saki eM teica

    Cik interesanti, es pasludinu sevi par pilnīgi nezinošu programmēšanā un viss, kas saistīts ar skriptu, man nebija ne jausmas, kā tas darbojas, bet es esmu pamanījis, ka dažiem ir šī galvene.

  14.   Mario raimondi teica

    Ar mani noticis skaidrojums, kas saistīts ar šo ierakstu: es gribēju instalēt Adobe air sīkrīku (pokera izredžu kalkulatoru). Tas, ko dara Adobe gaisa instalētājs, palaiž atbilstošo skriptu ar “su”, bet formā ./, lūdzot ievadīt saknes paroli. Tā kā skriptam nebija izpildes atļauju, tas izmeta atļauju, kas bija risinājums: palaidiet skriptu ar sh, ja nevēlaties mainīt atļaujas (ātrāk nekā dodoties uz mapi tmp chmod un visu to). Tur skripts tiek izpildīts, tas izsauc Adobe instalētāju un vēl vienu tauriņu lietu.

  15.   Ero-Sennins teica

    Ļoti interesants raksts! Paldies, ka palīdzējāt uzzināt nedaudz vairāk par konsoli. Apskatīsim, vai jūs turpināt publicēt šādus rakstus ^ ^.
    Tā turpināt, tas, bez šaubām, ir mans mīļākais emuārs !!

  16.   erpower teica

    Paturiet prātā, ka starp izmantotajām tulka versijām var būt atšķirības. Palaižot skriptu tieši saskaņā ar shebang, nav iespējams norādīt, kuru tulka versiju izmantot, kas var būt nepieciešama. Ja tā vietā palaižat tulku un skriptu nodosiet kā parametru, jūs zināt, kura tā versija darbojas.

    Piemēram, Python, ja shebang ir #! / Usr / bin / python2.4, programma darbosies citādi nekā tad, ja tā ir #! / Usr / bin / python2.6 vai ja tā ir #! / Usr / bin / python (kas parasti ir simboliska saite uz pēc noklusējuma instalēto un konfigurēto Python versiju). Tas notiek tāpēc, ka Python 2.6 ir jauna funkcionalitāte, kuras nepastāvēja Python 2.4, tāpēc skripta rakstīšana, kas izmanto šo funkcionalitāti, norādot #! / Usr / bin / python shebang, neizdosies, ja sistēmā ir instalēts tikai python 2.4. Tā vietā jūs vienmēr varat piespiest skriptu darboties ar vajadzīgo pitona versiju, sākot ar “python2.4 /path/al/script.py” vai “python2.6 /path/al/script.py/

    Attiecībā uz čaulas skriptiem ir arī atšķirības starp jūsu izmantotajiem čaulām, tāpēc, izmantojot #! / Bin / sh un #! / Bin / bash, atkarībā no skripta var būt dažādi rezultāti. Ja rakstāt skriptu, izmantojot funkcijas, kas pastāv tikai bash, bet norādāt #! / Bin / sh shebang, skripts, iespējams, darbosies operētājsistēmā Linux (lielākajā daļā izplatījumu / bin / sh ir simboliska saite uz bash), taču tas, iespējams, neizdosies citos UNIX, kur bash nav instalēts vai kur / bin / sh nav simboliska saite uz / bin / bash.

    Arī saistībā ar pārnesamību jāņem vērā, ka šebangā norādītais ceļš ir absolūts, un ir gadījumi, kad tulki tiek uzstādīti citās vietās. Piemēram, ir ierasts, ka pitona tulks ir instalēts mapē / usr / local / bin / python, ja esat lejupielādējis un kompilējis Python, nevis izmantojat paketi no sava izplatītāja. Ja jūsu shebang ir #! / Usr / bin / python, skripts šajās sistēmās nedarbosies. Lai izvairītos no šīm problēmām, varat izmantot kā shebang "#! / Usr / bin / env python" (vai "#! / Usr / bin / env sh"), kā paskaidrots http://en.wikipedia.org/wiki/Shebang_(Unix)#Portability

  17.   Izmantosim Linux teica

    Paldies Džonatanam! Prieks redzēt komentārus!
    Priekā! Pāvils.

  18.   Entonijs teica

    Nekur nedara tas, ko es gribu zināt, vai vismaz es nezinu, kā to meklētājprogrammā pacelt, es gribu izveidot skriptu, kas kāda iemesla dēļ xX izpilda komandu aptitude vai «su» (tas ir tikai piemērs, bet tie ir 2 gadījumi, par kuriem es varu iedomāties), un piemērotības gadījumā tas dažreiz prasa man ievadīt "yon" vai "su" man prasa paroli ... es gribētu, lai skripts izvēlētos šīs opcijas automātiski vai nu nododot parametru, vai izmantojot kādu metodi, kuru tas nezina .... Paldies par uzmanību

    1.    izmantosim linux teica

      Sveiks, Antonio! Ja jūsu problēma ir ievadīt paroli, es nedomāju, ka ir risinājums. Tieši tāpēc, ka tas ir drošības līdzeklis, lai ne visi varētu instalēt programmu.
      Runājot par piemērotību un nepieciešamību likt jā, es domāju, ka to var atrisināt. Es šobrīd neatceros precīzu izmantojamo parametru, bet vienkārši uzziniet to rokasgrāmatu lapās. Atveriet termināli un ievadiet komandu: man aptitude.
      Apskāviens! Pāvils.

  19.   Deivids MM teica

    Ļoti labs amats.
    Man īpaši patika-šajā ierakstā- ka uz radušos jautājumu / šaubām tiek atbildēts ļoti skaidri un kodolīgi.