Estensioni di file per script shell unix [closed]

Chiuso . Questa domanda è basata su opinioni . Attualmente non accetta risposte.

Commenti

  • A volte si possono trovare script di shell senza shebang (o senza permessi di esecuzione). In tal caso, un nome che termina con .sh può essere un suggerimento per lutente di eseguirlo con bash script.sh (o sh, ovviamente ).
  • Se uno script di shell ha unestensione è comunemente .sh. Non ho mai visto uno script .ksh o .bash. La maggior parte degli script di shell non ha estensione, tuttavia, come tutti gli script in /etc/init.d/* come esempio.
  • Mentre una conclusione semplicistica (sì o no) è lopinione, le cose da considerare non lo sono .

Rispondi

Chiamerei solo .sh qualcosa che è inteso come portabile (e si spera è portabile).

Altrimenti penso sia meglio nascondere la lingua. Il lettore attento lo trovalo comunque nella riga shebang. (In pratica, .bash o .zsh, ecc … i suffissi sono usati raramente.)

Commenti

  • Solo da questa pagina, possiamo già vedere un numero abbastanza non banale di persone che lo utilizzano. Perché dici che sono " usato raramente "? Qualche citazione? O si basa semplicemente sulla tua esperienza?
  • Vorrei utilizzare .bash se ' è destinato a essere acquistato da un altro script ed è compatibile solo con bash, ecc. Se può essere fornito da qualsiasi shell compatibile con bourne come sh, dash o bash, gli darei unestensione .sh. Se ' deve essere eseguito, non ' metteremo unestensione.

Risposta

Direi che non esistono “buone pratiche” per le estensioni dei file, rigorosamente per motivi tecnici: i file system Unix / Linux / * BSD non “t supportare le estensioni di per sé. Ciò che stai chiamando unestensione è semplicemente un suffisso di un singolo nome di file. Questo è diverso dai file system VM / CMS, VMS, MS-DOS e Windows e dai sistemi operativi in cui un posto speciale nellinode- lequivalente morale è riservato a unestensione.

Quel piccolo sproloquio ora è finito, penso che sia “un po sciocco mettere un suffisso” .sh “o” .ksh “o” .bash “su una shell nome del file script. Un programma è un programma: non esiste alcun vantaggio nel distinguere ciò che viene eseguito. Nessun unix o linux o qualsiasi altro kernel ha deciso di chiamare un interprete su un file solo a causa del suffisso del nome di un file. È tutto fatto dal #! riga o qualche altra sequenza di byte “numero magico” alla inizio del file. In effetti, decidere cosa eseguire in base a una “estensione” del nome del file è uno dei fattori che rende Windows una calamita per il malware. Guarda quante truffe di malware di Windows coinvolgono un file denominato “something.jpg.exe”: per impostazione predefinita, le versioni più recenti di Windows non mostrano lestensione “.exe” e incoraggia un utente a fare semplicemente doppio clic sull “immagine”. una visualizzazione immagine in esecuzione, il malware viene eseguito.

Quello che potresti pensare come un comando diretto è spesso comunque uno script di shell. A volte cc è stato un sh-script, firefox è uno sh-script, startx è uno sh-script. Non ci credo “è un cognitivo o vantaggio organizzativo nel contrassegnare uno script con un suffisso “.sh”.

Commenti

  • Non sono daccordo! Il mio lavoro consiste nel confezionare unapplicazione che coinvolge migliaia di file che vanno da eseguibili binari a script di shell (ksh, bash e alcuni csh legacy). Per me, credimi, fa fa la differenza essere in grado di sapere a colpo docchio (o in unespressione regolare) cosa tipo di file di cui stiamo discutendo e che stiamo cercando.Il punto è che potrebbe b e un vantaggio nel distinguere ciò che viene escluso e una best practice dovrebbe incoraggiare a dichiarare esplicitamente il tipo di file.
  • @rahmu: scrivilo come risposta. Fornisci alcune specifiche su come i nomi distinguibili con regex ti aiutano a confezionare (e forse mantenere) quellapplicazione. Nota in particolare linterazione tra ciò che interpreta il file e il suffisso del nome del file ' e come questo ti aiuta a svolgere le attività. Sono ' interessato ad argomenti seri contro il mio punto di vista e ' sono disposto a cambiare se ' sono convinto. Ho votato contro il tuo commento per dimostrarlo.
  • Mi piacerebbe, purtroppo posso solo parlare della mia attuale esperienza nel mio attuale lavoro.Non ' non so molto di buone pratiche e standard in generale ; Sento che dovrei fare qualche ricerca prima di pubblicare una risposta qui. ' lo esaminerò stasera dopo il lavoro 🙂
  • @rahmu Il " file esiste per determinare il tipo di file. È in grado di distinguere gli script scritti per shell diverse.
  • Se assegni a uno script di shell unestensione .sh, ' dovrà digitare che .sh come parte del nome del comando allavvio. Questo ' è il motivo principale per cui ' non mi piace inserire quellestensione (lo stesso per qualsiasi cosa che abbia una linea shebang). A proposito, il problema in Windows non è il .exe prefisso di per sé (è ' banale creare un eseguibile denominato image.jpg in Linux, dopotutto), ma il fatto che Windows di solito nasconda quellestensione, combinato con il fatto che lazione necessaria per avviare un eseguibile e per aprire un documento è esattamente la stessa.

Risposta

Essendo uno che ha lavorato in una moltitudine di ambienti? nix, ho dovuto scrivere in unampia varietà di conchiglie. Che tu ci creda o no, attraverso le piattaforme, i gusci non sono gli stessi. Quindi, se mantieni la tua libreria personale in più shell (quando necessario) è molto utile utilizzare le estensioni per identificare le shell. In questo modo, quando ci si sposta su unaltra piattaforma e la shell è leggermente diversa, si sa quali script mirare alle modifiche. .sh .ksh .bsh .csh …

Commenti

  • Questo sembra concordare con unix.stackexchange.com/questions/31760/ …
  • Non hai un #! allinizio dello script (ad es. #!/bin/bash)?
  • Gnu / Linux, BSD e UNIX sono tutti Unix. Non cè bisogno di? Nix. Linux è un kernel, Android usa Linux ma non è un Unix (a meno che tu non aggiunga software extra, nel qual caso hai unapp Unix).
  • @ ctrl-alt-delor: " Unix " è un marchio . Le persone spesso usano "? Nix " per evitare il problema del marchio (e dei pedanti).
  • @JS ` UNIX ' è un marchio di The Open Group. Unix e unix non sono greens.org/about/unix.html

Risposta

Non dovresti utilizzare unestensione per gli eseguibili, poiché non sono intercambiabili. Immagina di avere uno script di shell a.sh, quindi riscrivi in python a.py, ora devi cambiare ogni programma che ti chiama script , sono trapelati i dettagli dellimplementazione.

Lintera cosa dellestensione del nome del file in Windows di Mircosoft è un disastro: per esempio quello che avrebbe potuto essere a.audio, b.audio, c.audio, è a.mp3, b.wav, c.ogg e d.picture, e.picture, f.picture è d.jpeg, e.png, f.gif. La maggior parte delle volte non ci interessa quale formato è presente laudio o limmagine. Dobbiamo anche dedicare molto tempo a insegnare ai nuovi utenti tutte le estensioni dei file.

Commenti

Risposta

Come hai detto tu, le estensioni di file Unix sono puramente informative. Hai solo bisogno che il tuo script abbia uno shebang corretto e sia eseguibile.

Puoi non avere alcuna estensione o usare .sh.

I personalmente usa le seguenti convenzioni, indipendentemente dalla shell usata (csh, tcsh, bash, sh, …):

  • nessuna estensione per script di sistema o di alto livello (estremamente raro).
  • .sh per gli script classici, di grado da basso ad alto.

Commenti

  • Che cosa intendi con " script classici, di grado da basso ad alto "?
  • Penso Con questo intendevo astrazione o livello di organizzazione. Cioè a te ' non interessa quale lingua / strumento di script viene utilizzato dietro alcuni comandi: quindi ' non usi alcuna estensione. Per altri, è bene sapere che si tratta di un bash o di uno script di shell ksh esotico (con la corretta estensione). … ma è stato 2 anni fa;)

Answer

Le estensioni degli script di shell sono molto utili. Ad esempio spesso scrivo script che hanno più file in più lingue (es.bash, awk e lua) nella stessa directory. Se ho bisogno di cercare una stringa solo nei file bash, lestensione lo rende molto utile, per ridurre i falsi positivi. O se voglio fare un conteggio delle righe di tutto il mio codice bash per quel progetto.

È un problema dover digitare lestensione durante lesecuzione del programma, quindi creo anche un collegamento simbolico senza lestensione a leseguibile principale, per modificarlo / eseguirlo senza dover digitare lestensione ogni volta. I collegamenti simbolici sono economici e facili.

Commenti

Risposta

Come altri hanno detto, la shell non si preoccupa delle estensioni. Tuttavia, consente una rapida identificazione umana dei file. Vedo file che terminano con .py o .sh e so subito cosa dovrebbero essere (almeno). Come dice Steve, anche la ricerca per estensione del file o il conteggio delle righe sono considerazioni pratiche.

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *