Commenti
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 comesh
,dash
obash
, 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 denominatoimage.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
- Un altro motivo per non usare
*.sh
in cui mi sono imbattuto è che Debian ' srun-parts
ha vinto ' t eseguire script con estensioni, come in/etc/cron.*/
: archive.oreilly.com/pub /post/runparts_scripts_a_note_about.html
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
- Questo sembra concordare con unix.stackexchange. it / questions / 31760 / …
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.
bash script.sh
(osh
, ovviamente ).