Sh және ./ көмегімен бас сценарийін іске қосудың айырмашылығы неде?

Бас сценарийлерді емес, кез-келген сценарийді қолданған кезде де осы сұрақ туындауы мүмкін. Сценарийді аудармашы арқылы іске қосу мен оны тікелей іске қосудың арасында үлкен айырмашылық бар ма?

Біз Linux-ті қолданайық (UL) осы қызықты хабарламада ашатын тағы бір жұмбақ.


Сіз сценарийдің файлының атын аудармашыға беру арқылы сценарийді іске қосқанда (sh, python, perl және т.б.), сіз дәлелдегіңіз келген бағдарламаны дәлел ретінде беріп, аудармашыны орындайсыз. Мысалы, біз sh аудармашысын miscript.sh аргументін беру арқылы іске қосамыз.

sh қате жазба .sh

Егер сіз сценарийді өздігінен іске қосатын болсаңыз, онда жүйе өзіне қажет аудармашыны шақырады және иә, сценарийді оны аудармашыға аргумент ретінде жіберіп, орындайды, бірақ бәрі автоматты түрде және сценарийді орындаған пайдаланушыны білмейді.

./miscript.sh

Сценарийді өздігінен іске қосу үшін 2 шарт орындалуы керек:

1) сценарий «жарылыс сызығын» қамтуы керек. Бұл # таңбаларынан басталуы керек сценарийдің бірінші жолы. және сіз аудармашы орналасқан жолды көрсетуіңіз керек. Бұл шарт тек bash емес, сценарийдің кез-келген түріне (python, perl және т.б.) қатысты екенін ескеру маңызды.

Мәселен, мысалы, біздің сценарий бірінші жол ретінде келесілерді қамтуы керек:

#! / bin / bash

2) файлда келесі рұқсаттар болуы керек:

Біздің сценарийді орындау рұқсатын беру үшін біз мынаны жазуымыз керек:

chmod a + x қате жазба.sh

Дайын, енді оны осылай іске қосыңыз:

./miscript.sh

Немесе сценарийді оңай шақыруға мүмкіндік беретін «арнайы» жолға көшіру арқылы. Мысалы, біз оны / usr / sbin-ге көшіре аламыз және оны кез-келген жерден, оның орналасқан жерінің толық жолын қоспай-ақ басқара аламыз:

Біз көшіреміз:

sudo cp miscript.sh / usr / sbin / қате жазба

Біз орындаймыз:

қате жазу

Көріп отырғаныңыздай, шын мәнінде перде артында болып жатқан жағдай екі жағдайда да өте ұқсас. Алайда, «жарылыс сызығын» қосу арқылы сіздің сценарийлеріңізді тарату әлдеқайда жеңіл болады, өйткені пайдаланушылар оларды орындау үшін қажетті аудармашылар орналасқан жолды есте сақтамайды. Қорытынды: бұл негізінен жайлылық туралы мәселе.


Мақаланың мазмұны біздің ұстанымдарымызды ұстанады редакторлық этика. Қате туралы хабарлау үшін нұқыңыз Мұнда.

20 пікір, өз пікіріңізді қалдырыңыз

Пікіріңізді қалдырыңыз

Сіздің электрондық пошта мекен-жайы емес жарияланады. Міндетті өрістер таңбаланған *

*

*

  1. Деректерге жауапты: Мигель Анхель Гатан
  2. Деректердің мақсаты: СПАМ-ны басқару, түсініктемелерді басқару.
  3. Заңдылық: Сіздің келісіміңіз
  4. Деректер туралы ақпарат: заңды міндеттемелерді қоспағанда, деректер үшінші тұлғаларға жіберілмейді.
  5. Деректерді сақтау: Occentus Networks (ЕО) орналастырған мәліметтер базасы
  6. Құқықтар: Сіз кез-келген уақытта ақпаратты шектей, қалпына келтіре және жоя аласыз.

  1.   Oswaldo Villarroel дижо

    Мен 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 қолданайық дижо

    Сіз айтқандарыңыз қызық. Ол екі формада аталады: shebang сызығы немесе тікелей жарылыс сызығы. Мен сізге ақпарат беремін: 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 Di eM дижо

    Мен өзімді бағдарламалау мен сценарийге қатысты барлық нәрселерден мүлдем хабарсызмын деп жариялаймын, бұл қалай жұмыс істейтінін білмедім, бірақ кейбіреулерінде бұл тақырып бар екенін байқадым.

  14.   Марио раймонди дижо

    Менімен болған түсініктеме, осы жазбамен байланысты: мен adobe air гаджетін (покер коэффициенті калькуляторы) орнатқым келді. Adobe air инсталляторы сәйкесінше сценарийді «su» -мен іске қосады, бірақ ./ түрінде сізден түбірлік пароль сұрайды. Сценарийде орындау рұқсаттары болмағандықтан, рұқсат берілмеді, шешім қабылданды: егер сіз рұқсаттарды өзгерткіңіз келмесе (tmp chmod қалтасына барғаннан гөрі жылдамырақ) сценарийді іске қосыңыз. Онда сценарий орындалады, ол adobe инсталляторын және тағы бір көбелекті шақырады.

  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 орнатылған болса, сәтсіз болады. Оның орнына сіз әрқашан сценарийді «python2.4 /path/al/script.py» немесе «python2.6 /path/al/script.py/» арқылы бастап, өзіңіз қалаған python нұсқасымен жұмыс істеуге мәжбүрлей аласыз.

    Қабықша сценарийлер үшін сіз қолданатын қабықшалардың айырмашылықтары да бар, сондықтан #! / Bin / sh және #! / Bin / bash сценарийлеріне байланысты әр түрлі нәтижелерге ие болуы мүмкін. Егер сіз тек сценарийді тек bash-та болатын, бірақ #! / Bin / sh shebang деп көрсететін мүмкіндіктерді пайдаланып жазсаңыз, онда сіздің сценарийіңіз Linux-та жұмыс істейтін шығар (көптеген таратылымдарда / bin / sh - bash-қа символдық сілтеме), бірақ ол сәтсіздікке ұшырауы мүмкін bash орнатылмаған немесе / bin / sh / bin / bash-ге символдық сілтеме болып табылмайтын басқа UNIX-терде.

    Сондай-ақ, портативтілікке байланысты, 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 белгілі бір себептермен ептілік немесе «su» командаларын орындайтын сценарий жасағым келеді (бұл тек мысал, бірақ олар менің ойыма түсетін 2 жағдай) және икемділік жағдайында кейде мені «yon» -ке кіруімді сұрайды немесе «su» -де пароль сұрайды ... Мен сценарийдің осы параметрлерді таңдағанын қалаймын автоматты түрде немесе параметрді беру арқылы немесе ол білмейтін әдісті қолдану арқылы .... Назар аударғаныңызға рақмет

    1.    линуксті қолданайық дижо

      Сәлеметсіз бе, Антонио! Егер сіздің проблемаңыз парольді енгізу керек болса, менің ойымша, шешім жоқ. Барлығы бағдарламаны орната алмайтындай етіп, бұл қауіпсіздік шарасы болғандықтан.
      Бейімділікке және «иә» қоюға тура келетін болса, оны шешуге болады деп ойлаймын. Осы сәтте нақты параметрді есімде жоқ, тек адам парақтарынан біліп алыңыз. Терминалды ашып, пәрменді енгізіңіз: ер адам.
      Құшақтаңыз! Пауыл.

  19.   Дэвид ММ дижо

    Өте жақсы пост.
    Маған пайда болған сұраққа / күмәнға өте нақты және нақты жауап бергені - осы посттан ерекше ұнады.