Kommentarer
Svar
Jeg vil kun kalde .sh
noget, der er ment at være bærbar (og forhåbentlig er bærbar).
Ellers synes jeg det bare er bedre at skjule sproget. Den omhyggelige læser vil find det alligevel i shebang-linjen. (I praksis bruges .bash
eller .zsh
osv.… suffikser sjældent.)
Kommentarer
- Fra denne side alene kan vi allerede se en hel del ikke-private mennesker, der bruger den. Hvorfor siger du, at de er " sjældent brugt "? Er der nogle citater? Eller er dette kun baseret på din erfaring?
- Jeg bruger
.bash
hvis det ' er beregnet til indkøb ved et andet script og er kun kompatibelt med bash osv. Hvis det kan købes af en hvilken som helst bourne-kompatibel shell, såsomsh
,dash
, ellerbash
, ville jeg give det en.sh
udvidelse. Hvis det ' skulle eksekveres, ville jeg ikke ' ikke lægge en udvidelse.
Svar
Jeg vil sige, at der ikke findes nogen “god praksis” for filtypenavne, strengt taget teknisk: Unix / Linux / * BSD-filsystemer don t supportudvidelser i sig selv. Det, du kalder en udvidelse, er blot et suffiks med et enkelt filnavn. Det er anderledes end VM / CMS-, VMS-, MS-DOS- og Windows-filsystemer og OSer, hvor et specielt sted i inoden- moral-ækvivalent er forbeholdt en udvidelse.
Den lille rant nu over, jeg synes det er “lidt fjollet at sætte et” .sh “eller” .ksh “eller” .bash “suffiks på en skal scriptfilnavn. Et program er et program: der er ingen fordel ved at skelne mellem, hvad der bliver udført. Ingen unix eller linux eller hvilken som helst kerne har besluttet at kalde en tolk på en fil bare på grund af et filnavnesuffiks. Det hele gøres af #!
linje eller en anden “magisk nummer” sekvens af bytes ved begyndelsen af filen. Faktisk er det en af de faktorer, der gør Windows til en malware-magnet, at beslutte, hvad der skal udføres på baggrund af filtypenavnet “udvidelse”. Se på, hvor mange Windows-malware-scams, der involverer en fil med navnet “something.jpg.exe” – som standard har nyere Windows ikke vist “.exe” -udvidelsen, og opfordre en bruger til at dobbeltklikke på “billedet”. en billedvisning, der kører, kører malware.
Hvad du måske tænker på som en ligeud kommando, er ofte et shell-script alligevel. Nogle gange har cc
været en sh-script, firefox
er et sh-script, startx
er et sh-script. Jeg tror ikke der “er en kognitiv eller organisatorisk fordel ved at markere et script med suffikset “.sh”.
Kommentarer
- Jeg er uenig! Mit job består i at pakke en applikation, der involverer tusindvis af filer der spænder fra binære eksekverbare filer til shell-scripts (ksh, bash og noget ældre csh). For mig, tro mig det betyder en forskel for at være i stand til at vide et blik (eller i en regex) hvad slags fil, vi diskuterer, og vi leder efter. Min pointe er, at der kunne b e en fordel ved at skelne mellem hvad der bliver ekskluderet og en bedste praksis bør tilskynde til eksplicit at angive filtypen.
- @rahmu: skriv det op som et svar. Giv nogle detaljer om, hvordan regex-skelne navne hjælper dig med at pakke (og måske vedligeholde) applikationen. Bemærk specifikt interaktionen mellem, hvad der fortolker filen og filnavnet ' s suffiks, og hvordan det hjælper dig med at udføre opgaver. Jeg ' er interesseret i seriøse argumenter mod mit synspunkt, og jeg ' er villig til at ændre, hvis jeg ' er overbevist. Jeg stemte for din kommentar for at bevise det.
- Det vil jeg meget gerne, desværre kan jeg kun tale om min nuværende erfaring i mit nuværende job.Jeg ' ved ikke meget om god praksis og standarder generelt ; Jeg føler, at jeg bør undersøge noget, før jeg sender et svar her. Jeg ' Jeg ser på det i aften efter arbejde 🙂
- @rahmu " -fil " -kommandoen findes til bestemmelse af filtype. Den er i stand til at skelne mellem scripts, der er skrevet til forskellige skaller.
- Hvis du giver et shell-script en
.sh
-udvidelse, skal du ' Jeg skal skrive det.sh
som en del af kommandonavnet, når du starter det. At ' er hovedårsagen til, at jeg ikke ' ikke kan lide at sætte denne udvidelse ind (det samme med alt, hvad der har en shebang-linje). BTW, problemet i Windows er ikke.exe
præfikset i sig selv (det ' er trivielt for at lave en eksekverbar navn med navnetimage.jpg
i Linux, trods alt), men det faktum, at Windows normalt skjuler denne udvidelse kombineret med det faktum, at handlingen, der var nødvendig for at starte en eksekverbar og åbne et dokument, er nøjagtig den samme.
Svar
Som en, der har arbejdet i en lang række? nix-miljøer, har jeg været nødt til at skrive i en lang række skaller. Tro det eller ej, på tværs af platforme er skaller ikke de samme. Så hvis du vedligeholder dit personlige bibliotek i flere skaller (når det er nødvendigt), er det meget nyttigt at bruge udvidelser til at identificere skaller. På den måde når du flytter til en anden platform, og skallen er lidt anderledes, ved du, hvilke scripts du skal målrette mod ændringer. .sh .ksh .bsh .csh …
Kommentarer
- Dette synes at stemme overens med unix.stackexchange.com/questions/31760/ …
- Har du ikke en
#!
i starten af scriptet (f.eks.#!/bin/bash
)? - Gnu / Linux, BSD og UNIX er alle Unix. Intet behov for? Nix. Linux er en kerne, Android brugte Linux, men er ikke en Unix (medmindre du tilføjer ekstra software, i hvilket tilfælde du har en Unix-app).
- @ ctrl-alt-delor: " Unix " er et varemærke . Folk bruger ofte "? Nix " for at undgå varemærkeproblemet (og pedanterne).
- @JS ` UNIX ' er et varemærke tilhørende The Open Group. Unix og unix er ikke greens.org/about/unix.html
Svar
Du bør ikke bruge en udvidelse til eksekverbare filer, da de ikke kan udskiftes. Forestil dig at du har et shell-script a.sh
, og skriv derefter igen i python a.py
, du skal nu ændre hvert program, der kalder dig script , du har lækket implementeringsdetaljer.
Hele filtypenavnet i Mircosofts Windows er et rod: for eksempel, hvad der kunne have været a.audio, b.audio, c.audio
, er a.mp3, b.wav, c.ogg
og d.picture, e.picture, f.picture
er d.jpeg, e.png, f.gif
. Det meste af tiden er vi ligeglad med hvilket format lyden eller billedet er inde. Vi skal også bruge lang tid på at lære nye brugere alle filtypenavne.
Kommentarer
- En anden grund ikke at bruge
*.sh
Jeg lige stødte på er, at Debian ' srun-parts
vandt ' kør ikke scripts med udvidelser, såsom i/etc/cron.*/
: archive.oreilly.com/pub /post/runparts_scripts_a_note_about.html
Svar
Som du sagde det, er Unix-filtypen udelukkende information. Du skal bare bruge dit script til at have en korrekt shebang og være eksekverbar.
Du kan enten ikke have nogen udvidelse eller bruge .sh
.
I personligt bruger følgende konventioner, uanset den anvendte skal (csh, tcsh, bash, sh, …):
- ingen udvidelse til system- eller high-grade scripts (ekstremt sjælden). li>
-
.sh
til klassiske scripts, lav til høj karakter.
Kommentarer
- Hvad mener du med " klassiske scripts, lav til høj grad "?
- Jeg tror Jeg mente abstraktion eller organisationsniveau med det. Det er, at du ikke ' er ligeglad med hvilket sprog / scriptværktøj der bruges bag nogle kommandoer: så du <
t bruger nogen udvidelse. For andre er det godt at vide, at det er et bash eller noget eksotisk ksh shell-script (med den rigtige udvidelse). … men det var for 2 år siden;)
Svar
Shell-scriptudvidelser er ret nyttige. For eksempel skriver jeg ofte scripts, der har flere filer på flere sprog (f.eks.bash, awk og lua) i samme bibliotek. Hvis jeg kun skal søge efter en streng i bash-filerne, gør udvidelsen dette meget praktisk for at reducere falske positive. Eller hvis jeg vil foretage en linjetælling af al min bash-kode til det projekt.
Det er smertefuldt at skulle skrive udvidelsen, når jeg kører programmet, så jeg laver også et symlink uden udvidelsen til den vigtigste eksekverbare, for at redigere / køre den uden at skulle skrive udvidelsen hver gang. Symlinks er billige og lette.
Kommentarer
- Dette synes at stemme overens med unix.stackexchange. com / spørgsmål / 31760 / …
Svar
Som andre har sagt, er skallen ligeglad med udvidelser. Det tillader dog hurtig menneskelig identifikation af filer. Jeg ser filer, der slutter på .py
eller .sh
og jeg ved hurtigt, hvad de (i det mindste) burde være. Som Steve siger, det er også praktiske overvejelser at søge efter filtypenavn eller foretage en linjetælling.
bash script.sh
(ellersh
, selvfølgelig ).