Bestandsextensies voor unix shell-scripts [gesloten]

Gesloten . Deze vraag is op meningen gebaseerd . Het accepteert momenteel geen antwoorden.

Reacties

  • Soms kunnen shellscripts zonder shebang (of zonder exec-permissies) worden gevonden. In dat geval kan een naam die eindigt op .sh een hint zijn voor de gebruiker om ze uit te voeren met bash script.sh (of sh, natuurlijk ).
  • Als een shellscript een extensie heeft, is dit gewoonlijk .sh. Ik heb nog nooit een .ksh- of .bash-script gezien. De meeste shellscripts hebben echter geen extensie, zoals alle scripts in /etc/init.d/* als voorbeeld.
  • Hoewel een simplistische conclusie (ja of nee) mening is, zijn de dingen die je moet overwegen niet .

Answer

Ik zou alleen .sh iets noemen dat is bedoeld om draagbaar te zijn (en hopelijk is draagbaar).

Anders denk ik dat het gewoon beter is om de taal te verbergen. De zorgvuldige lezer zal vind het toch in de shebang-regel. (In de praktijk worden .bash of .zsh, enz … achtervoegsels zelden gebruikt.)

Reacties

  • Alleen al vanaf deze pagina kunnen we al zien dat een behoorlijk niet-triviaal aantal mensen het gebruikt. Waarom zeg je dat ze zelden gebruikt "? Zijn er citaten? Of is dit alleen gebaseerd op jouw ervaring?
  • Ik zou .bash als het ' bedoeld is als bron door een ander script en is alleen compatibel met bash, enz. Als het kan worden verkregen door een bourne-compatibele shell zoals sh, dash , of bash, ik zou het een .sh extensie geven. Als het ' bedoeld was om te worden uitgevoerd, zou ik geen ' een extensie plaatsen.

Antwoord

Ik zou zeggen dat er geen “goede praktijken” voor bestandsextensies bestaan, strikt technisch gezien: Unix / Linux / * BSD-bestandssystemen niet extensies per se ondersteunen. Wat u een extensie noemt, is slechts een achtervoegsel van een enkele bestandsnaam. Dat is anders dan de VM / CMS-, VMS-, MS-DOS- en Windows-bestandssystemen en besturingssystemen waar een speciale plek in de inode- moreel equivalent is gereserveerd voor een extensie.

Die kleine tirade nu voorbij, ik vind het “een beetje dom om een” .sh “of” .ksh “of” .bash “achtervoegsel op een shell te plaatsen script bestandsnaam. Een programma is een programma: er is geen voordeel bij het onderscheiden van wat wordt uitgevoerd. Geen unix of linux of welke kernel dan ook heeft besloten om een interpreter op een bestand aan te roepen alleen vanwege een achtervoegsel van de bestandsnaam. Het wordt allemaal gedaan door de #! regel, of een andere “magische nummer” reeks bytes aan de begin van het bestand. In feite is het beslissen wat er moet worden uitgevoerd op basis van de “extensie” van een bestandsnaam een van de factoren die Windows tot een malware-magneet maken. Kijk bij hoeveel Windows-malware-scams een bestand met de naam “something.jpg.exe” betrokken is – nieuwere Windows toont standaard niet de “.exe” -extensie en moedig een gebruiker aan om gewoon op de “afbeelding” te dubbelklikken. terwijl een afbeeldingsweergave wordt uitgevoerd, wordt de malware uitgevoerd.

Wat u zou kunnen beschouwen als een rechttoe rechtaan commando, is toch vaak een shellscript. Soms is cc een sh-script, firefox is een sh-script, startx is een sh-script. Ik geloof niet dat er een cognitieve of het organisatorische voordeel van het markeren van een script met het achtervoegsel “.sh”.

Opmerkingen

  • Ik ben het daar niet mee eens! Mijn taak bestaat uit het inpakken van een applicatie met duizenden bestanden variërend van binaire uitvoerbare bestanden tot shell-scripts (ksh, bash en sommige legacy csh). Voor mij, geloof me dat het maakt een verschil maakt om in een oogopslag (of in een regex) te weten wat soort bestand dat we bespreken en waarnaar we op zoek zijn. Mijn punt is dat er b e een voordeel bij het onderscheiden van wat wordt uitgeworpen en een best practice zou moeten aanmoedigen om expliciet het type bestand te vermelden.
  • @rahmu: schrijf dat op als antwoord. Geef wat details over hoe regex-te onderscheiden namen u helpen bij het verpakken (en misschien onderhouden) van die toepassing. Let specifiek op de interactie tussen wat het bestand interpreteert en het achtervoegsel van de bestandsnaam ' s en hoe dat u helpt bij het uitvoeren van taken. Ik ' m geïnteresseerd in serieuze argumenten tegen mijn standpunt, en ik ' ben bereid te veranderen als ik ' m overtuigd. Ik heb uw opmerking gestemd om het te bewijzen.
  • Ik zou het graag willen, helaas kan ik alleen maar spreken over mijn huidige ervaring in mijn huidige baan.Ik weet niet ' veel over goede praktijken en standaarden in het algemeen ; Ik vind dat ik wat onderzoek moet doen voordat ik hier een antwoord plaats. Ik ' zal er vanavond na het werk naar kijken 🙂
  • @rahmu Het " bestand " commando bestaat om het bestandstype te bepalen. Het is in staat scripts te onderscheiden die voor verschillende shells zijn geschreven.
  • Als je een shellscript een .sh extensie geeft, kun je ' Ik zal dat .sh moeten typen als onderdeel van de commandonaam bij het starten ervan. Dat ' is de belangrijkste reden waarom ik het ' niet leuk vind om die extensie in te voeren (hetzelfde geldt voor alles met een shebang-regel). Het probleem in Windows is trouwens niet het .exe voorvoegsel per se (het is ' s triviaal om een uitvoerbaar bestand te maken met de naam image.jpg in Linux, tenslotte), maar het feit dat Windows die extensie meestal verbergt, gecombineerd met het feit dat de actie die nodig is om een uitvoerbaar bestand te starten en om een document te openen, precies hetzelfde is.

Answer

Als iemand die in een groot aantal van? nix-omgevingen heeft gewerkt, heb ik in een breed scala aan schelpen. Geloof het of niet, op platforms zijn de schalen niet hetzelfde. Dus als u uw persoonlijke bibliotheek in meerdere shells onderhoudt (indien nodig), is het erg handig om extensies te gebruiken om de shells te identificeren. Op die manier weet u, wanneer u naar een ander platform gaat en de shell iets anders is, op welke scripts u zich moet richten voor wijzigingen. .sh .ksh .bsh .csh …

Reacties

  • Dit lijkt in overeenstemming te zijn met unix.stackexchange.com/questions/31760/ …
  • Heeft u geen #! aan het begin van het script (bijv. #!/bin/bash)?
  • Gnu / Linux, BSD en de UNIXen zijn allemaal Unix. Geen behoefte aan? Nix. Linux is een kernel, Android gebruikt Linux maar is geen Unix (tenzij je extra software toevoegt, in welk geval je een Unix-app hebt).
  • @ ctrl-alt-delor: " Unix " is een handelsmerk . Mensen gebruiken vaak "? Nix " om het handelsmerkprobleem (en de pedanten) te vermijden.
  • @JS UNIX ' is een handelsmerk van The Open Group. Unix en unix zijn niet greens.org/about/unix.html

Antwoord

Gebruik geen extensie voor uitvoerbare bestanden, aangezien deze niet onderling uitwisselbaar zijn. Stel je voor dat je een shell-script a.sh hebt, en dan herschrijf in python a.py, je moet nu elk programma wijzigen dat je script aanroept , je hebt implementatiedetails gelekt.

De hele bestandsnaamextensie in Mircosofts Windows is een puinhoop: wat had bijvoorbeeld a.audio, b.audio, c.audio kunnen zijn, is a.mp3, b.wav, c.ogg, en d.picture, e.picture, f.picture is d.jpeg, e.png, f.gif. Meestal maakt het ons niet uit welke indeling de audio of afbeelding is binnen. We moeten ook veel tijd besteden aan het aanleren van alle bestandsextensies aan nieuwe gebruikers.

Opmerkingen

Answer

Zoals je al zei, de Unix-bestandsextensies zijn puur informatie. Je hebt alleen je script nodig om een correcte shebang te hebben en uitvoerbaar te zijn.

Je kunt ofwel geen extensie hebben of .sh gebruiken.

I gebruik persoonlijk de volgende conventies, ongeacht de gebruikte shell (csh, tcsh, bash, sh, …):

  • geen extensie voor systeem- of hoogwaardige scripts (uiterst zeldzaam).
  • de .sh voor klassieke scripts, laag tot hoog cijfer.

Reacties

  • Wat bedoel je met " klassieke scripts, lage tot hoge kwaliteit "?
  • Ik denk Daarmee bedoelde ik abstractie of organisatieniveau. Dat wil zeggen dat het ' niet uitmaakt welke taal / scripttool er achter sommige commandos wordt gebruikt: dus gebruik ' geen extensie. Voor anderen is het goed om te weten dat het een bash of een exotisch ksh shell-script is (met de juiste extensie). … maar dat was 2 jaar geleden;)

Antwoord

Shell-script-extensies zijn erg handig. Ik schrijf bijvoorbeeld vaak scripts met meerdere bestanden in meerdere talen (bijv.bash, awk en lua) in dezelfde map. Als ik alleen in de bash-bestanden naar een string moet zoeken, maakt de extensie dit erg handig om valse positieven te verminderen. Of als ik al mijn bash-code voor dat project wil tellen.

Het is vervelend om de extensie te moeten typen tijdens het uitvoeren van het programma, dus ik maak ook een symlink zonder de extensie naar het belangrijkste uitvoerbare bestand, om het te bewerken / uit te voeren zonder elke keer de extensie te hoeven typen. Symlinks zijn goedkoop en gemakkelijk.

Opmerkingen

Antwoord

Zoals anderen al hebben gezegd, geeft de shell niets om extensies. Het staat echter wel snelle menselijke identificatie van bestanden toe. Ik zie bestanden die eindigen op .py of .sh en ik weet snel wat ze (in ieder geval) zouden moeten zijn. Zoals Steve zegt, zijn zoeken op bestandsextensie of het tellen van regels ook praktische overwegingen.

Geef een reactie

Het e-mailadres wordt niet gepubliceerd. Vereiste velden zijn gemarkeerd met *