Přípony souborů pro unixové skripty shellu [uzavřené]

Uzavřeno . Tato otázka je míněna . Momentálně nepřijímá odpovědi.

Komentáře

  • Někdy lze najít skripty prostředí bez shebangu (nebo bez oprávnění ke spuštění). V takovém případě může být název končící na .sh nápovědou pro uživatele, aby je spustil pomocí bash script.sh (nebo sh, samozřejmě ).
  • Pokud má shell skript příponu, je to obvykle .sh. Nikdy jsem neviděl skript .ksh nebo .bash. Většina skriptů prostředí však nemá žádné rozšíření, stejně jako všechny skripty v /etc/init.d/*.
  • Zatímco zjednodušujícím závěrem (ano nebo ne) je názor, věci, které je třeba vzít v úvahu, nejsou .

Odpověď

Nazval bych jen .sh něco, co je určen jako přenosný (a doufejme, že je přenosný).

Jinak si myslím, že je lepší jazyk skrýt. Pečlivý čtenář najděte ji v linii shebangu. (V praxi se .bash nebo .zsh atd.… používají jen zřídka.)

Komentáře

  • Jen z této stránky již vidíme docela netriviální množství lidí, kteří ji používají. Proč říkáte, že jsou " zřídka používané "? Citace? Nebo je to pouze na základě vašich zkušeností?
  • Použil bych .bash pokud to ' mělo být získáváno jiným skriptem a je kompatibilní pouze s bash atd. Pokud jej může získat jakýkoli bourne kompatibilní shell, například sh, dash , nebo bash, dal bych mu .sh příponu. Pokud by to mělo být ' spuštěno, ' bych příponu nepostavil.

Odpověď

Řekl bych, že neexistují žádné „dobré postupy“ pro přípony souborů, přísně z technického hlediska: unixové / linuxové / * BSD souborové systémy nejsou podpora přípon sama o sobě. To, co nazýváte příponou, je pouze přípona jediného názvu souboru. To se liší od souborových systémů a operačních systémů VM / CMS, VMS, MS-DOS a Windows, kde je zvláštní místo v inode- morální ekvivalent je vyhrazen pro příponu.

Ten malý chvástání, který je teď u konce, si myslím, že je trochu hloupé vložit příponu „.sh“ nebo „.ksh“ nebo „.bash“ název souboru skriptu. Program je program: neexistuje žádná výhoda v rozlišování toho, co se provede. Žádný unix ani linux ani žádné jádro se nerozhodlo zavolat tlumočníka na nějaký soubor jen kvůli příponě názvu souboru. Všechno to dělá #! řádek nebo nějaká jiná sekvence bajtů „magického čísla“ na začátek souboru. Ve skutečnosti je rozhodování o tom, co provést na základě „přípony“ názvu souboru, jedním z faktorů, díky nimž je Windows magnetem malwaru. Podívejte se, kolik podvodů s malwarem v systému Windows zahrnuje soubor s názvem „something.jpg.exe“ – ve výchozím nastavení novější systém Windows neukazuje příponu „.exe“ a vyzve uživatele, aby dvakrát klikl na „obrázek“. Místo běží obrázek, běží malware.

To, co si můžete představit jako přímý příkaz, je i tak často skript prostředí. Někdy cc byl sh-script, firefox je sh-script, startx je sh-script. Nevěřím, že je kognitivní nebo přínos pro organizaci pro označení skriptu příponou „.sh“.

Komentáře

  • Nesouhlasím! Moje práce spočívá v zabalení aplikace zahrnující tisíce soubory od binárních spustitelných souborů po skripty prostředí (ksh, bash a některé starší csh). Věřte mi, že to dělá , aby bylo možné hned na první pohled (nebo v regexu) vědět, co druh souboru, o kterém diskutujeme a hledáme. Jde mi o to, že by mohl b Výhodou v rozlišování toho, co se vylučuje, a osvědčený postup by mělo být výslovné uvedení typu souboru.
  • @rahmu: napište to jako odpověď. Uveďte několik podrobností o tom, jak vám názvy rozlišitelné podle regulárního výrazu pomáhají s balením (a možná i údržbou) dané aplikace. Všimněte si konkrétně interakce mezi tím, co soubor interpretuje, a příponou názvu souboru ' a tím, jak vám pomáhá při provádění úkolů. ' zajímám se o vážné argumenty proti mému pohledu a jsem ' ochoten se změnit, pokud ' jsem přesvědčen. Hlasoval jsem pro váš komentář, abych to dokázal.
  • Rád bych, bohužel, mohu mluvit pouze o mých současných zkušenostech v mé současné práci.' Nevím mnoho o osvědčených postupech a normách obecně ; Cítím, že bych měl udělat nějaký průzkum, než sem zveřejním odpověď. ' se do toho dnes večer po práci podívám 🙂
  • @rahmu " soubor " existuje příkaz pro určení typu souboru. Je schopen rozlišovat skripty napsané pro různé skořápky.
  • Pokud dáte shell skriptu .sh rozšíření, ' při spuštění musím toto .sh zadat jako součást názvu příkazu. To ' to je hlavní důvod, proč se mi ' nelíbí uvedení tohoto rozšíření (stejně jako u čehokoli, co má linii shebang). BTW, problém v systému Windows není .exe předpona sama o sobě (' je triviální vytvořit spustitelný soubor s názvem image.jpg v Linuxu), ale skutečnost, že Windows obvykle toto rozšíření skrývá, v kombinaci se skutečností, že akce potřebovala ke spuštění spustitelného souboru a otevření dokumentu, je úplně stejná.

Odpověď

Jako člověk, který pracoval v mnoha prostředích? nix, jsem musel psát v široké škále mušle. Věřte tomu nebo ne, na různých platformách nejsou granáty stejné. Pokud tedy udržujete svoji osobní knihovnu ve více skořápkách (je-li to nutné), je velmi užitečné použít rozšíření k identifikaci skořápek. Tímto způsobem, když přejdete na jinou platformu a prostředí se mírně liší, víte, na jaké skripty je třeba cílit na úpravy. .sh .ksh .bsh .csh …

Komentáře

  • Zdá se, že to souhlasí s unix.stackexchange.com/questions/31760/ …
  • Nemáte #! na začátku skriptu (např. #!/bin/bash)?
  • Gnu / Linux, BSD a UNIX jsou všechny Unix. Není třeba? Linux je jádro, systém Android používá Linux, ale nejde o Unix (pokud nepřidáte další software, v tom případě máte unixovou aplikaci).
  • @ ctrl-alt-delor: " Unix " je ochranná známka . Lidé často používají "? Nix " k tomu, aby se vyhnuli problému s ochrannou známkou (a pedantům).
  • @JS ` UNIX ' je ochranná známka společnosti The Open Group. Unix a unix nejsou greens.org/about/unix.html

odpověď

Neměli byste používat příponu pro spustitelné soubory, protože nejsou zaměnitelné. Představte si, že máte shell skript a.sh a poté jej znovu zapíšete v pythonu a.py, nyní musíte změnit každý program, který vás volá skript , unikly vám podrobnosti implementace.

Celá věc s příponou názvu souboru v systému Mircosoft je nepořádek: například to, co mohlo být a.audio, b.audio, c.audio, je a.mp3, b.wav, c.ogg a d.picture, e.picture, f.picture je d.jpeg, e.png, f.gif. Většinou nám nezáleží na tom, jaký formát audio nebo obrázek je uvnitř. Musíme také strávit dlouhou dobu výukou nových uživatelů všech přípon souborů.

Komentáře

Odpověď

Jak jste řekl, přípony souborů Unix jsou čistě informační. Potřebujete, aby váš skript měl správný shebang a byl spustitelný.

Můžete mít buď žádné rozšíření, nebo použít .sh.

I osobně použijte následující konvence, bez ohledu na použitý shell (csh, tcsh, bash, sh, …):

  • žádné rozšíření pro systém nebo vysoce kvalitní skripty (extrémně vzácné).
  • the .sh pro klasické skripty, nízké až vysoké kvality.

Komentáře

  • Co máte na mysli pod " klasickými skripty, od nízkého po nejvyšší stupeň "?
  • myslím Myslel jsem tím abstrakci nebo organizační úroveň. To znamená, že ' se nestaráte o to, jaký jazyk / skriptový nástroj je za některými příkazy použit: takže ' nepoužíváte žádné rozšíření. Pro ostatní je dobré vědět, že se jedná o bash nebo nějaký exotický skript shellu ksh (se správnou příponou). … ale to bylo před 2 lety;)

Odpověď

Rozšíření skriptů Shell jsou docela užitečná. Například často píšu skripty, které obsahují více souborů ve více jazycích (např.bash, awk a lua) ve stejném adresáři. Pokud potřebuji vyhledat řetězec pouze v souborech bash, rozšíření je velmi užitečné, aby se snížily falešné pozitivy. Nebo pokud chci udělat počet řádků celého mého bash kódu pro tento projekt.

Je bolestné, když musím při spuštění programu psát příponu, takže také vytvořím symbolický odkaz bez rozšíření na hlavní spustitelný soubor, chcete-li jej upravit / spustit, aniž byste museli pokaždé zadávat příponu. Symlinky jsou levné a snadné.

Komentáře

odpověď

Jak již řekli ostatní, prostředí se nestará o přípony. Umožňuje však rychlou identifikaci souborů člověkem. Vidím soubory končící na .py nebo .sh a rychle vím, co by (alespoň) mělo být. Jak říká Steve, vyhledávání podle přípony souboru nebo počet řádků jsou také praktické úvahy.

Napsat komentář

Vaše e-mailová adresa nebude zveřejněna. Vyžadované informace jsou označeny *