У чым розніца паміж запускам сцэнарыя bash з выкарыстаннем sh і ./

Гэтае ж пытанне можа паўстаць пры выкарыстанні любога тыпу сцэнарыяў, а не толькі баш. Ці існуе сур'ёзная розніца паміж запускам сцэнарыя праз інтэрпрэтатар і непасрэдным запускам?

Яшчэ адна загадка, якую мы раскрыем у гэтым цікавым паведамленні ад "Выкарыстоўваем Linux".


Калі вы запускаеце сцэнар, перадаючы імя файла сцэнара інтэрпрэтатару (sh, python, perl і г.д.), вы фактычна выконваеце інтэрпрэтатар, перадаючы праграму, якую вы хочаце выканаць у якасці аргумента. Напрыклад, мы запускаем інтэрпрэтатар sh, перадаючы яму аргумент miscript.sh.

ш памылка.ш

Калі вы запусціце сцэнар самастойна, сістэма выкліча патрэбны ім інтэрпрэтатар, і, так, ён выканае сцэнар, перадаўшы яго ў якасці аргумента інтэрпрэтатару, але ўсё аўтаматычна і без ведама карыстальніка, які выканаў сцэнар.

./myscript.sh

Для таго, каб запусціць сцэнар сам па сабе, неабходна выканаць 2 умовы:

1) сцэнар павінен уключаць "радок". Гэта першы радок сцэнарыя, які павінен пачынацца з сімвалаў #! і што вы павінны ўказаць шлях, дзе знаходзіцца перакладчык. Важна адзначыць, што гэтая ўмова справядлівая для любога тыпу сцэнарыяў (python, perl і г.д.), а не толькі для bash.

Такім чынам, напрыклад, наш скрыпт у якасці першага радка павінен утрымліваць наступнае:

#! / Bin / Баш

2) файл павінен мець дазвол на выкананне:

Каб даць дазвол на выкананне нашага сцэнарыя, мы павінны напісаць:

chmod a + x miscript.sh

Гатовы, зараз проста запусціце яго так:

./myscript.sh

Альбо шляхам капіравання сцэнарыя ў "спецыяльны" шлях, які дазваляе лёгка выклікаць яго. Напрыклад, мы можам скапіяваць яго ў / usr / sbin і запусціць з любога месца, не ўключаючы поўны шлях, дзе ён знаходзіцца:

Мы капіруем:

sudo cp miscript.sh / usr / sbin / miscript

Мы выконваем:

памылка

Як бачыце, на самой справе тое, што адбываецца за кадрам, вельмі падобна ў абодвух выпадках. Аднак, уключыўшы "радок", вашы сцэнарыі будзе значна прасцей распаўсюджваць, бо карыстальнікам не трэба будзе памятаць шлях, па якім знаходзяцца неабходныя інтэрпрэтатары, каб мець магчымасць іх выканаць. Выснова: у асноўным гэта пытанне камфорту.


Змест артыкула адпавядае нашым прынцыпам рэдакцыйная этыка. Каб паведаміць пра памылку, націсніце тут.

20 каментарыяў, пакіньце свой

Пакіньце свой каментар

Ваш электронны адрас не будзе апублікаваны. Абавязковыя для запаўнення палі пазначаныя *

*

*

  1. Адказны за дадзеныя: Мігель Анхель Гатон
  2. Прызначэнне дадзеных: Кантроль спаму, кіраванне каментарыямі.
  3. Легітымнасць: ваша згода
  4. Перадача дадзеных: Дадзеныя не будуць перададзены трэцім асобам, за выключэннем юрыдычных абавязкаў.
  5. Захоўванне дадзеных: База дадзеных, размешчаная Occentus Networks (ЕС)
  6. Правы: у любы час вы можаце абмежаваць, аднавіць і выдаліць сваю інфармацыю.

  1.   Освальда Вільяроэль сказаў

    Я згодны з вамі Erpower, і версія інтэрпрэтатара, і шлях да яго пераменныя, а не нязменныя, тым больш, калі лічыць, што дыстрыбутывы GNU / Linux не адзіныя, якія выкарыстоўваюць Bash (ёсць таксама: freeBSD, OpenSolaris, Mac) і многія з іх маюць розныя канфігурацыі альбо маршруты.

    Важна ведаць, што вы валодаеце гнуткасцю (як вы добра згадалі), каб гуляць з выклікам сцэнарыя альбо з ./ альбо з sh (альбо python ... і г.д.)

  2.   el_que_sabe@gmail.com сказаў

    Bash - гэта кампутарная праграма, функцыя якой - інтэрпрэтацыя заказаў.

    Ён заснаваны на абалонцы Unix і адпавядае POSIX.

    замест гэтага sh - гэта кампутарная праграма, функцыя якой - інтэрпрэтацыя заказаў.
    Уключае такія функцыі, як кіраванне працэсам, перанакіраванне
    увод / вывад, спіс і чытанне файлаў, абарона,
    сувязі і камандная мова для напісання праграм
    партыі альбо сцэнарыі. Гэта быў перакладчык, які выкарыстоўваўся ў першых версіях Unix, і ён стаў фактычным стандартам.

  3.   Дыяна С сказаў

    Добры дзень, я пачатковец у выкарыстанні сцэнарыяў, і я хацеў бы ведаць, ці можа хто-небудзь дапамагчы мне з маёй праблемай:

    Я кірую праграмай, якая патрабуе ўключэння некалькіх канчатковых дадзеных праз кансоль, і я даведаўся, што з дапамогай сцэнарыя можна выканаць праграму з пачатковымі дадзенымі, каб не пісаць яе зноў і зноў, калі я трэба запусціць праграму.

    Я не ведаю, як гэта зрабіць, таму, калі хто-небудзь можа мне дапамагчы ў гэтым, я буду вельмі ўдзячны.

  4.   Давайце карыстацца Linux сказаў

    Глядзіце, гэта залежыць ад таго, на якой мове праграмавання вы пішаце сцэнар. Аднак у любым выпадку вам трэба:

    1) Калі вы хочаце, каб карыстальнік мусіў уводзіць гэтыя дадзеныя пры кожным выкананні сцэнарыя, найбольш распаўсюджанай працэдурай з'яўляецца пераменная прымаць значэнні, уведзеныя на ўваходзе.

    2) У выпадку, калі значэнні заўсёды аднолькавыя, вы можаце выкарыстоўваць канстанты.

    3) Іншы варыянт - гэта магчымасць таго, што ваш сцэнар можа прымаць параметры.

    На ўра! Павел.

  5.   Давайце карыстацца Linux сказаў

    Цікава, што вы згадваеце. Яе называюць двума спосабамі: лініяй шебанга альбо прамой лініяй выбуху. Я даю вам інфармацыю: http://python.about.com/od/programmingglossary/g/defbangline.htm
    На ўра! Павел.

  6.   @llomellamomario сказаў

    Цікава, я ніколі не спыняўся, каб падумаць пра гэтую дэталь. Было б цікава пабачыць больш артыкулаў пра рэтуш кансолераў, сярод іх знакамітая перакампіляцыя ядра, каб выдаліць непатрэбныя кілаграмы кода, якія ёсць толькі для сумяшчальнасці і паляпшэння хуткасці сістэмы.

  7.   Давайце карыстацца Linux сказаў

    ДОБРА. Я буду мець гэта на ўвазе.
    На ўра! Павел.

  8.   Давайце карыстацца Linux сказаў

    Я рады, што гэта спрацавала. Я заўсёды імкнуся размяшчаць рэчы, якія мне падаюцца цікавымі і практычнымі.
    Абдымкі! Павел.

  9.   Фелікс Мануэль Брыта Амарантэ сказаў

    Кожны праграміст, які мае добрыя звычкі, дадае ў першы радок кода "радок". У Python я ніколі не забываю кадаванне і радок.
    #! / usr / bin / python2.7
    # *. * кадаванне = utf-8 *. *

  10.   Diex02 сказаў

    Выдатна, я спадзяюся, што вы можаце апублікаваць дадатковую інфармацыю пра камандны радок, асабліва калі гаворка ідзе пра кампіляцыю альбо ўстаноўку з зыходных файлаў (tar.gz і г.д.)

  11.   Джо дзі Кастра сказаў

    Я ніколі не чуў пра "выбух", я заўсёды ведаў яе як Шэбанг

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

    прывітанне

  12.   Джонатан Фернандэс сказаў

    цікавая заўвага ... дзякуй!

  13.   eM Ды eM сказаў

    Як цікава, я абвяшчаю сябе абсалютна недасведчаным у праграмаванні і ва ўсім, што звязана са сцэнарыям. Я нават не ўяўляў, як гэта працуе, але я заўважыў, што некаторыя маюць гэты загаловак.

  14.   Марыё Раймондзі сказаў

    Удакладненне, якое адбылося са мной, звязанае з гэтым запісам: я хацеў усталяваць самаробны паветраны гаджэт (калькулятар шанцаў на покер). Тое, што робіць Adobe Installer Air, запускае адпаведны сцэнар з "su", але ў форме ./ з просьбай указаць пароль карыстальніка. Паколькі ў сцэнарыя не было дазволаў на выкананне, дазвол быў адмоўлены, рашэнне: запусціце сцэнар з sh, калі вы не хочаце мяняць дазволы (хутчэй, чым пераход у папку tmp chmod і ўсё такое). Там сцэнар выконваецца, ён выклікае ўсталёўшчык самана і яшчэ адну рэч.

  15.   Эра-Сеннін сказаў

    Вельмі цікавы артыкул! Дзякуй, што дапамаглі даведацца крыху больш пра кансоль. Паглядзім, ці будзеце вы працягваць публікаваць падобныя артыкулы ^^.
    Так працягвайце, гэта, несумненна, мой любімы блог !!

  16.   Энергія сказаў

    Майце на ўвазе, што паміж выкарыстоўванымі версіямі перакладчыка могуць быць адрозненні. Запуск сцэнарыя непасрэдна ў адпаведнасці з shebang ніяк не можа паказаць, якую версію інтэрпрэтатара выкарыстоўваць, якая можа спатрэбіцца. Калі вы запусціце інтэрпрэтатар і перадасце сцэнар як параметр, вы ведаеце, якая яго версія працуе.

    Напрыклад, у Python, калі shebang - гэта #! / Usr / bin / python2.4, праграма будзе працаваць інакш, чым калі #! / Usr / bin / python2.6 або калі #! / Usr / bin / python (што звычайна з'яўляецца сімвалічнай спасылкай на версію Python, якая ўсталёўваецца і наладжваецца па змаўчанні). Гэта адбываецца таму, што Python 2.6 мае новую функцыянальнасць, якой не было ў Python 2.4, таму напісанне сцэнарыя, які выкарыстоўвае гэтую функцыянальнасць з указаннем #! / Usr / bin / python shebang, не атрымаецца, калі ў сістэме ўсталяваны толькі python 2.4. Замест гэтага вы заўсёды можаце прымусіць сцэнар запускацца з патрэбнай версіяй python, запусціўшы яго з "python2.4 /path/al/script.py" ці "python2.6 /path/al/script.py/

    Для сцэнарыяў абалонкі таксама існуюць адрозненні паміж абалонкамі, якія вы выкарыстоўваеце, таму выкарыстанне #! / Bin / sh і #! / Bin / bash можа мець розныя вынікі ў залежнасці ад сцэнарыя. Калі вы пішаце сцэнар з выкарыстаннем функцый, якія існуюць толькі ў bash, але ўказваеце #! / Bin / sh shebang, ваш сцэнар, верагодна, будзе працаваць у Linux (у большасці дыстрыбутываў / bin / sh - гэта сімвалічная спасылка на bash), але ён, верагодна, не атрымаецца у іншых UNIX, дзе bash не ўсталяваны альбо дзе / bin / sh не з'яўляецца сімвалічнай спасылкай на / bin / bash.

    Таксама звязана з партатыўнасцю, трэба ўлічваць, што шлях, указаны ў shebang, з'яўляецца абсалютным, і бываюць выпадкі, калі перакладчыкі ўсталёўваюцца ў іншых месцах. Напрыклад, звычайна выкарыстоўваецца інтэрпрэтатар python, усталяваны ў / usr / local / bin / python, калі вы загрузілі і скампілявалі Python, а не выкарыстоўвалі пакет з вашага дыстрыбутыва. Калі ваш shebang #! / Usr / bin / python, сцэнар не будзе працаваць у гэтых сістэмах. Каб паспрабаваць пазбегнуць гэтых праблем, вы можаце выкарыстоўваць як shebang "#! / Usr / bin / env python" (альбо "#! / Usr / bin / env sh"), як тлумачыцца ў http://en.wikipedia.org/wiki/Shebang_(Unix)#Portability

  17.   Давайце карыстацца Linux сказаў

    Дзякуй Джонатану! Прыемна бачыць ваш каментар!
    На ўра! Павел.

  18.   Антоніа сказаў

    Нідзе я не хачу ведаць тое, што я хачу ведаць, альбо, па меншай меры, я не ведаю, як падняць яго ў пошукавай машыне, я хачу стварыць сцэнар, які па прычыне xX выконвае каманду aptitude альбо «su» (гэта толькі прыклад, але гэта два выпадкі, пра якія я магу думаць), і ў выпадку схільнасці часам ён просіць мяне ўвесці "yon", а ў "su" - пароль ... Я хацеў бы, каб сцэнар выбраў гэтыя параметры аўтаматычна альбо шляхам перадачы параметра, альбо з дапамогай якога-небудзь метаду, які ён не ведае .... Дзякуй за ўвагу

    1.    давайце выкарыстоўваць Linux сказаў

      Прывітанне Антоніа! Калі ваша праблема заключаецца ў тым, каб увесці пароль, я не думаю, што ёсць рашэнне. Менавіта таму, што гэта мера бяспекі, так што ўсталяваць праграму можа не кожны.
      Што тычыцца схільнасці і неабходнасці паставіць "так", я думаю, гэта можна вырашыць. На дадзены момант я не памятаю дакладны параметр для выкарыстання, але проста даведаюся на старонках кіраўніцтва. Адкрыйце тэрмінал і ўвядзіце каманду: man aptitude.
      Абдымі! Павел.

  19.   Дэвід М.М. сказаў

    Вельмі добры пост.
    Мне асабліва спадабалася - у гэтым допісе - тое, што ўзнікае пытанне / сумнеў, адказвае вельмі выразна і коратка.