Која је разлика између покретања басх скрипте помоћу сх и ./

Исто питање може се појавити када користите било коју врсту скрипте, не само оне басх. Постоји ли велика разлика између покретања скрипте кроз тумач и њеног директног покретања?

Још једна мистерија коју ћемо открити у овом занимљивом посту из Употребимо Линук (уЛ).


Када покренете скрипту прослеђујући име датотеке скрипте интерпретатору (сх, питхон, перл итд.), Заправо извршавате интерпретатор, предајући програм који желите да извршите као аргумент. На пример, покрећемо тумач сх тако што ћемо му проследити аргумент мисцрипт.сх.

сх погрешно.сх

Ако скрипту покренете самостално, систем ће позвати тумач који му треба и тада ће, да, извршити скрипту предајући је као аргумент интерпретатору, али све аутоматски и без знања корисника који је извршио скрипту.

./мисцрипт.сх

Да би се скрипта покренула сама, морају бити испуњена 2 услова:

1) скрипта мора да садржи „прасак“. Ово је први ред скрипте, који мора почињати са знаковима #! и да морате навести путању на којој се налази тумач. Важно је напоменути да је овај услов тачан за било коју врсту скрипте (питхон, перл итд.), А не само оне из басх-а.

Тако, на пример, наша скрипта треба да садржи следеће као први ред:

#! / бин / басх

2) датотека мора имати дозволе за извршавање:

Да бисмо одобрили извршење нашој скрипти, морамо написати:

цхмод а + к мисцрипт.сх

Спремни, сада само покрените овако:

./мисцрипт.сх

Или копирањем скрипте на „посебну“ путању која омогућава лако позивање. На пример, можемо га копирати у / уср / сбин и покренути са било ког места без укључивања пуне путање где се налази:

Копирамо:

судо цп мисцрипт.сх / уср / сбин / мисцрипт

Извршавамо:

мисцрипт

Као што видите, у стварности је оно што се дешава иза кулиса врло слично у оба случаја. Међутим, укључивањем „праска“, ваше скрипте ће бити много лакше дистрибуирати, јер корисници неће морати да памте путању на којој се налазе потребни тумачи да би могли да их изврше. Закључак: у основи је реч о удобности.


Оставите свој коментар

Ваша емаил адреса неће бити објављена. Обавезна поља су означена са *

*

*

  1. За податке одговоран: Мигуел Ангел Гатон
  2. Сврха података: Контрола нежељене поште, управљање коментарима.
  3. Легитимација: Ваш пристанак
  4. Комуникација података: Подаци се неће преносити трећим лицима, осим по законској обавези.
  5. Похрана података: База података коју хостује Оццентус Нетворкс (ЕУ)
  6. Права: У било ком тренутку можете ограничити, опоравити и избрисати своје податке.

  1.   Освалдо Вилларроел дијо

    Слажем се с вама, Ерповер, и верзија интерпретатора и његова путања су променљиве и нису константне, чак и више ако се сматра да ГНУ / Линук дистрибуције нису једине које користе Басх (постоје и: фрееБСД, ОпенСоларис, Мац) и многи од њих имају различите конфигурације или руте.

    Важно је знати да имате флексибилност (као што сте добро споменули) да се играте позивом на скрипту, било са ./ или са сх (или питхон ... итд.)

  2.   ел_куе_сабе@гмаил.цом дијо

    Басх је рачунарски програм чија је функција тумачење налога.

    Заснован је на Уник љусци и у складу је са ПОСИКС-ом.

    уместо тога, сх је рачунарски програм чија је функција тумачење налога.
    Укључује функције као што су контрола процеса, преусмеравање
    улаз / излаз, списак датотека и читање, заштита,
    комуникације и командни језик за писање програма
    серије или скрипте. То је био тумач кориштен у првим верзијама Уника и постао је де фацто стандард.

  3.   Диана Ц. дијо

    Здраво, почетник сам у коришћењу скрипти и желео бих да знам може ли неко да ми помогне у вези са мојим проблемом:

    Управљам програмом који захтева укључивање неколико почетних података кроз конзолу и открио сам да је преко скрипте могуће извршити програм са почетним подацима, како не бих морао да га пишем изнова и изнова када треба да покренем програм.

    Не знам како то да радим, па ако неко може да ми помогне у овоме, бићу му веома захвалан.

  4.   Користимо Линук дијо

    Видите, то зависи од тога на којем програмском језику пишете скрипту. Међутим, у сваком случају оно што вам треба је:

    1) Ако желите да корисник мора да унесе те податке кад год се скрипта извршава, најчешћи поступак је да променљива узима вредности унете у улаз.

    2) У случају да су вредности увек исте, можете користити константе.

    3) Друга опција је могућност да ваша скрипта може узимати параметре.

    Живели! Паул.

  5.   Користимо Линук дијо

    Занимљиво је оно што спомињете. Назива се из 2 облика: схебанг линија или директно праска линија. Предајем вам податке: http://python.about.com/od/programmingglossary/g/defbangline.htm
    Живели! Паул.

  6.   @лломелламомарио дијо

    Занимљиво, никада нисам престао да размишљам о том детаљу. Било би занимљиво видети још чланака о конзоли, међу којима је и чувена рекомпилација језгра да би се уклонили килограми непотребног кода који постоје само ради компатибилности и побољшања брзине система.

  7.   Користимо Линук дијо

    У РЕДУ. Имаћу то на уму.
    Живели! Паул.

  8.   Користимо Линук дијо

    Драго ми је да је успело. Увек се трудим да објавим ствари за које мислим да би могле бити занимљиве и практичне.
    Загрљај! Паул.

  9.   Фелик Мануел Брито Амаранте дијо

    Сваки програмер са добрим навикама додаје "прасак" у први ред кода. У Питхону никада не заборављам кодирање и прасак.
    #! / уср / бин / питхон2.7
    # *. * кодирање = утф-8 *. *

  10.   Диек02 дијо

    Изврсно, надамо се да можете објавити више информација о командној линији, посебно када је у питању компајлирање или инсталирање из изворних датотека (тар.гз, итд.)

  11.   Јое Ди Цастро дијо

    Никад нисам чуо за "прасак". Одувек сам га знао као Схебанг

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

    поздрави

  12.   Јонатхан Фернандез дијо

    занимљива напомена ... хвала!

  13.   еМ Ди еМ дијо

    Колико занимљиво, проглашавам се потпуно неуким у програмирању и свему везаном за скрипту, нисам имао појма како то функционише, али приметио сам да неки имају то заглавље.

  14.   Марио раимонди дијо

    Појашњење које ми се догодило у вези са овом објавом: Желео сам да инсталирам гаџет за адобе аир (калкулатор покер квота). Оно што адобе аир инсталлер ради је покретање одговарајуће скрипте са „су“, али у облику ./ тражећи од вас роот лозинку. Како скрипта није имала дозволе за извршење, бацила је одбијену дозволу, решење: покрените скрипту са сх ако не желите да промените дозволе (брже од одласка у тмп цхмод директоријум и све то). Тамо се скрипта покреће, позива адобе инсталатер и нешто друго лептира.

  15.   Еро-Сеннин дијо

    Врло занимљив чланак! Хвала што сте ми помогли да знам мало више о конзоли. Да видимо да ли настављате да објављујете чланке попут ових ^^.
    Наставите тако, ово је без сумње мој омиљени блог !!

  16.   Ерповер дијо

    Имајте на уму да могу постојати разлике између верзија тумача које се користе. Покретање скрипте директно према схебанг-у не постоји начин да се назначи коју верзију тумача треба користити, што би могло бити потребно. Ако уместо тога покренете тумач и предате скрипту као параметар, знате која се његова верзија покреће.

    На пример, у Питхону, ако је схебанг #! / Уср / бин / питхон2.4, програм ће се покретати другачије него ако је #! / Уср / бин / питхон2.6 или ако је #! / Уср / бин / питхон (што је обично симболична веза до верзије Питхона која је подразумевано инсталирана и конфигурисана). То се догађа зато што Питхон 2.6 има нову функционалност која није постојала у Питхону 2.4, па ће писање скрипте која користи ту функционалност означавајући #! / Уср / бин / питхон схебанг пропасти ако систем има инсталиран само питхон 2.4. Уместо тога, увек можете присилити скрипту да се покреће са верзијом питхона коју желите покретањем са „питхон2.4 /патх/ал/сцрипт.пи“ или „питхон2.6 /патх/ал/сцрипт.пи/

    За скрипте љуске такође постоје разлике између љуски које користите, па употреба #! / Бин / сх и #! / Бин / басх може имати различите резултате у зависности од скрипте. Ако напишете скрипту користећи функције које постоје само у басх, али назначите схебанг #! / Бин / сх, ваша скрипта ће вероватно радити на Линуку (на већини дистрибуција / бин / сх је симболична веза до басха), али вероватно неће успети у другим УНИКС-овима где басх није инсталиран или где / бин / сх није симболична веза до / бин / басх.

    Такође везано за преносивост, мора се узети у обзир да је путања назначена у схебанг-у апсолутна, а постоје случајеви када су преводиоци инсталирани на другим местима. На пример, уобичајено је да питхон интерпретер буде инсталиран у / уср / лоцал / бин / питхон ако сте преузели и компајлирали Питхон уместо да користите пакет из ваше дистрибуције. Ако је ваш схебанг #! / Уср / бин / питхон, скрипта неће радити на тим системима. Да бисте покушали да избегнете ове проблеме, можете користити као схебанг "#! / Уср / бин / енв питхон" (или "#! / Уср / бин / енв сх") како је објашњено у http://en.wikipedia.org/wiki/Shebang_(Unix)#Portability

  17.   Користимо Линук дијо

    Хвала Јонатхан! Лепо је видети вас коментар!
    Живели! Паул.

  18.   Антоније дијо

    Нигде оно што желим да знам, или бар не знам како да то подигнем у претраживачу, желим да створим скрипту која из разлога кКс извршава наредбу аптитуде или «су» (то је само пример, али то су 2 случаја којих се могу сјетити) и у случају способности понекад ме тражи да унесем "ион" или у "су" тражи лозинку ... Желио бих да скрипта одабере те опције аутоматски или прослеђивањем параметра или употребом неке методе коју он не познаје .... Хвала на пажњи

    1.    искористимо линук дијо

      Здраво Антонио! Ако ваш проблем треба да унесете лозинку, мислим да не постоји решење. Управо зато што је то мера безбедности, тако да не може свако да инсталира програм.
      Што се тиче способности и потребе да кажем да, мислим да се то може решити. Тренутно се не сећам тачног параметра који бих користио, али само сазнајте на ман страницама. Отворите терминал и унесите команду: ман аптитуде.
      Загрљај! Паул.

  19.   Давид ММ дијо

    Врло добар пост.
    Посебно ми се свидело - у овом посту - што се на постављено питање / сумњу одговара врло јасно и сажето.