Stejná otázka může vyvstat při použití jakéhokoli typu skriptu, nejen těch bash. Existuje zásadní rozdíl mezi spuštěním skriptu prostřednictvím tlumočníka a jeho přímým spuštěním?
Ještě jedna záhada, kterou odhalíme v tomto zajímavém příspěvku od Let's Use Linux (uL). |
Když spustíte skript předáním názvu souboru skriptu tlumočníkovi (sh, python, perl atd.), Provádíte ve skutečnosti tlumočníka a program, který chcete spustit, předáte jako argument. Například spustíme interpret sh předáním argumentu miscript.sh.
sh myscript.sh
Pokud spustíte skript sám, systém zavolá tlumočníka, kterého potřebuje, a pak ano, provede skript a předá jej jako argument tlumočníkovi, ale vše automaticky a bez vědomí uživatele, který skript provedl.
./myscript.sh
Aby bylo možné spustit skript samostatně, musí být splněny 2 podmínky:
1) skript musí obsahovat „ofinu“. Toto je první řádek skriptu, který musí začínat znaky #! a že musíte určit cestu, kde se nachází tlumočník. Je důležité si uvědomit, že tato podmínka platí pro jakýkoli typ skriptu (python, perl atd.), Nejen pro ty z bash.
Například náš skript by měl jako první řádek obsahovat následující:
#! / bin / bash
2) soubor musí mít oprávnění ke spuštění:
Abychom našemu skriptu mohli udělit oprávnění ke spuštění, musíme napsat:
chmod a + x miscript.sh
Připraveno, nyní to spusťte takto:
./myscript.sh
Nebo zkopírováním skriptu na „speciální“ cestu, která umožňuje jeho snadné vyvolání. Například jej můžeme zkopírovat do / usr / sbin a spustit jej odkudkoli, aniž bychom zahrnuli úplnou cestu tam, kde se nachází:
Kopírujeme:
sudo cp miscript.sh / usr / sbin / miscript
Provádíme:
chybný
Jak vidíte, ve skutečnosti je to, co se děje v zákulisí, v obou případech velmi podobné. Zahrnutím „řádky“ však bude vaše skripty mnohem jednodušší distribuovat, protože uživatelé si nebudou muset pamatovat cestu, kde se nacházejí potřební tlumočníci, aby je mohli spustit. Závěr: v zásadě jde o pohodlí.
Souhlasím s vámi Erpower, jak verze tlumočníka, tak jeho cesta jsou variabilní a ne konstantní, tím spíše, pokud se má za to, že distribuce GNU / Linux nejsou jediné, které používají Bash (existují také: freeBSD, OpenSolaris, Mac) a mnoho z nich mají různé konfigurace nebo trasy.
Důležité je vědět, že máte flexibilitu (jak jste dobře zmínil) hrát s voláním skriptu, buď s ./ nebo s sh (nebo python ... atd.)
Bash je počítačový program, jehož funkcí je interpretovat objednávky.
Je založen na unixovém prostředí a je kompatibilní s POSIX.
místo toho sh je počítačový program, jehož funkcí je interpretovat příkazy.
Zahrnuje funkce, jako je řízení procesu, přesměrování
vstup / výstup, výpis a čtení souborů, ochrana,
komunikace a příkazový jazyk pro psaní programů pomocí
dávky nebo skripty. Byl to tlumočník používaný v prvních verzích Unixu a stal se de facto standardem.
Dobrý den, v používání skriptů jsem začátečník a chtěl bych vědět, jestli mi někdo může pomoci s problémem, který mám:
Spravuji program, který vyžaduje zahrnutí několika počátečních dat přes konzolu, a zjistil jsem, že pomocí skriptu je možné spustit program s počátečními daty, abych ho nemusel psát znovu a znovu, když potřebuji spustit program.
Nevím, jak na to, takže pokud mi s tím někdo pomůže, budu velmi vděčný.
Podívejte se, záleží na tom, v jakém programovacím jazyce píšete skript. V každém případě však potřebujete:
1) Pokud chcete, aby uživatel musel tato data zadávat při každém spuštění skriptu, je nejběžnějším postupem, aby proměnná převzala hodnoty zadané ve vstupu.
2) V případě, že jsou hodnoty vždy stejné, můžete použít konstanty.
3) Další možností je možnost, že váš skript může mít parametry.
Na zdraví! Pavel.
Je zajímavé, co zmiňuješ. Říká se jí 2 formy: linie shebang nebo přímá linie bang. Dávám vám informace: http://python.about.com/od/programmingglossary/g/defbangline.htm
Na zdraví! Pavel.
Zajímavé, nikdy jsem nepřestal přemýšlet o tomto detailu. Bylo by zajímavé vidět více článků o retušování konzolů, mezi nimi i slavná rekompilace jádra k odstranění zbytečných kilogramů kódu, které jsou k dispozici pouze kvůli kompatibilitě a zlepšení rychlosti systému.
DOBŘE. Budu na to myslet.
Na zdraví! Pavel.
Jsem rád, že to fungovalo. Vždy se snažím zveřejňovat věci, které považuji za zajímavé a praktické.
Objetí! Pavel.
Každý programátor s dobrými návyky přidá do prvního řádku kódu „řádkovou linku“. V Pythonu nikdy nezapomenu na kódování a bang line.
#! / usr / bin / python2.7
# *. * encoding = utf-8 *. *
Skvělé, doufám, že můžete publikovat více informací o příkazovém řádku, zejména pokud jde o kompilaci nebo instalaci ze zdrojových souborů (tar.gz atd.)
Nikdy jsem neslyšel o „bang line“, vždy jsem to znal jako Shebang
http://en.wikipedia.org/wiki/Shebang_%28Unix%29
pozdravy
zajímavá poznámka ... děkuji!
Jak zajímavé, prohlašuji se za naprosto ignoranta programování a všeho, co souvisí se skriptem, neměl jsem tušení, jak to funguje, ale všiml jsem si, že někteří mají tuto hlavičku.
Vysvětlení, které se mi stalo, souvisí s tímto příspěvkem: Chtěl jsem si nainstalovat Adobe Air gadget (kalkulačka pokerových kurzů). Instalační program adobe air provede to, že spustí odpovídající skript se „su“, ale ve tvaru ./ vás požádá o heslo root. Vzhledem k tomu, že skript neměl oprávnění k provádění, vrhl oprávnění odepřeno, řešení: spusťte skript s sh, pokud nechcete změnit oprávnění (rychlejší než jít do složky tmp chmod a tak dále). Tam se skript spustí, zavolá instalační program adobe a další motýlí věc.
Velmi zajímavý článek! Děkujeme, že jste mi pomohli dozvědět se něco více o konzole. Uvidíme, jestli budete i nadále publikovat takové články ^ ^.
Pokračujte, toto je bezpochyby můj oblíbený blog !!
Pamatujte, že mezi použitými verzemi tlumočníka mohou existovat rozdíly. Spuštění skriptu přímo podle shebangu neexistuje způsob, jak určit, kterou verzi tlumočníka použít, což může být nezbytné. Pokud místo toho spustíte tlumočník a předáte skript jako parametr, víte, která verze je spuštěna.
Například v Pythonu, pokud je shebang #! / Usr / bin / python2.4, program poběží jinak, než kdyby byl #! / Usr / bin / python2.6 nebo pokud je #! / Usr / bin / python (což je obvykle symbolický odkaz na verzi Pythonu, která je ve výchozím nastavení nainstalována a nakonfigurována). K tomu dochází, protože Python 2.6 má nové funkce, které v Pythonu 2.4 neexistovaly, takže psaní skriptu, který používá tuto funkci označující #! / Usr / bin / python shebang, selže, pokud má systém nainstalován pouze python 2.4. Místo toho můžete vždy vynutit spuštění skriptu s verzí pythonu, kterou chcete, spuštěním příkazu „python2.4 /path/al/script.py“ nebo „python2.6 /path/al/script.py/
U skriptů prostředí existují také rozdíly mezi použitými skořápkami, takže použití #! / Bin / sh a #! / Bin / bash může mít různé výsledky v závislosti na skriptu. Pokud píšete skript pomocí funkcí, které existují pouze v bash, ale zadáte #! / Bin / sh shebang, váš skript pravděpodobně bude fungovat v Linuxu (na většině distribucí / bin / sh je symbolický odkaz na bash), ale pravděpodobně selže v jiných unixových systémech, kde není nainstalován bash nebo kde / bin / sh není symbolický odkaz na / bin / bash.
Také v souvislosti s přenositelností je třeba vzít v úvahu, že cesta uvedená v shebangu je absolutní a v některých případech jsou tlumočníci instalováni na jiných místech. Například je běžné mít nainstalovaný tlumočník pythonu v / usr / local / bin / python, pokud jste si stáhli a zkompilovali Python namísto použití balíčku z vaší distribuce. Pokud je váš shebang #! / Usr / bin / python, skript na těchto systémech nebude fungovat. Chcete-li se těmto problémům vyhnout, můžete použít jako shebang „#! / Usr / bin / env python“ (nebo „#! / Usr / bin / env sh“), jak je vysvětleno v http://en.wikipedia.org/wiki/Shebang_(Unix)#Portability
Díky Jonathane! Rád vás vidím, komentář!
Na zdraví! Pavel.
Nikde nic, co chci vědět, nebo alespoň nevím, jak to ve vyhledávači zvýšit, chci vytvořit skript, který z nějakého důvodu xX provede příkaz aptitude nebo «su» (je to jen příklad, ale jsou to dva případy, které mě napadnou) a v případě aptitude mě někdy požádá o zadání „yon“ nebo v „su“ požádá o heslo ... chtěl bych, aby skript tyto možnosti vybral automaticky buď předáním parametru, nebo pomocí metody, kterou nezná .... Díky za pozornost
Ahoj Antonio! Pokud je vaším problémem zadání hesla, nemyslím si, že existuje řešení. Právě proto, že se jedná o bezpečnostní opatření, aby si každý nemohl nainstalovat program.
Co se týče zdatnosti a nutnosti vyjádřit ano, myslím, že to lze vyřešit. V tuto chvíli si nepamatuji přesný parametr, který mám použít, ale zjistím to na manuálových stránkách. Otevřete terminál a zadejte příkaz: man aptitude.
Objetí! Pavel.
Velmi dobrý příspěvek.
Obzvláště se mi líbilo - v tomto příspěvku - že otázka / pochybnost, která vyvstává, je zodpovězena velmi jasně a stručně.