Uno standard / convenzione ufficiale per un'estensione di file per gli script shell alla fonte


11

Mi chiedevo se esiste una convenzione per le estensioni dei tipi di file per gli script di shell che si desidera generare anziché eseguire. Per esempio:

  1. Se voglio eseguire questo script in una subshell.

    ./script.sh 
  2. Se voglio ricordare di eseguire questo script dalla shell corrente.

    . script.source 

Esiste una convenzione (come POSIX per esempio) per un tipo di file nel secondo esempio? Qualcosa di simile .sourceo .sourceme?


Aggiornare

Questa domanda non fa alcuna opinione. Ho affermato chiaramente che vorrei sapere se esiste un'estensione di file standardizzata per questo tipo di script. Questa domanda è ancora meno basata sull'opinione di questa ben accolta domanda su un problema simile ( usare l'estensione .sh o .bash per gli script bash? ).


1
Alcune persone pensano che gli script di shell che possono essere eseguiti da eseguibili (cioè che iniziano con #!/bin/sho simili non dovrebbero avere estensione, perché l'utente non dovrebbe preoccuparsi della lingua in cui è stato scritto lo script sottostante.
the_velour_fog

1
Dipende da cosa serve, puoi avere env, rc, conf etc
123

1
@ 123 dipende, a volte una volta che costruire qualcosa di questo è utile e metterlo in $PATH, si arriva a usare tutto il tempo, quindi è come, ps, ls, curle tutti gli altri comandi, poi si inizia a funzioni di completamento di shell costruire intorno ad esso, trovo va bene rilasciare l'estensione. Ma sì, quando stai acquistando uno script di shell, che non sono eseguibili da soli, non chmod +xli farei e li nominerei script.sh. inoltre spesso assegno un'estensione semplicemente perché se non lo faccio non otterrò l'evidenziazione della sintassi sul mio editor.
the_velour_fog

5
Non c'è convenzione. Se fai parte di un'azienda o stai collaborando a un progetto di condivisione (ad es. Opensource), potresti avere standard locali da conformarti, ma non esiste una convenzione di fatto.
Stephen Harris,

1
La parola "convenzione" (che significa n. 2) è probabilmente ciò che conduce a risposte "basate sull'opinione". Le specifiche del gruppo aperto per l'origine non applicano alcuno standard di denominazione.
Jeff Schaller

Risposte:


18

Utilizzerei .sh(per i file in shlinguaggio POSIX , .bashper i bashfile non compatibili con sh , ovvero l'estensione identifica la lingua in cui è scritto lo script) per i file destinati a essere di provenienza (o più in generale non destinati a essere eseguiti), e nessuna estensione per i file che devono essere eseguiti.

Puoi anche aggiungere un:

#! /bin/echo Please-source

lei sbatte, in modo che quando eseguito per errore (anche se mi aspetto che quei file non debbano avere i permessi di esecuzione, che già impedirebbero l'esecuzione), si nota che dovrebbe invece essere di provenienza.


Puoi anche uscire se lo script non è di provenienza ( stackoverflow.com/q/2683279/4694621 )
Mateusz Piotrowski,

4

Nel caso dei file sorgente, penso che il modo migliore sia .conf per i file che configurano il tuo script e .shlib o .shlibs per i file che hanno funzioni o altri programmi di utilità.

Se vuoi impedire che il tuo script venga eseguito con la shell sbagliata e hashbang non è abbastanza per te, puoi usare questo:

if [ "$(readlink "/proc/$$/exe")" != "/bin/bash" ]; then
      echo >&2 "CAUTION: Wrong interpreter detected. You must use bash."
      exit 1
fi

1
Se avete intenzione di utilizzare la specifica di Linux /proc/$$/exe, si potrebbe anche farlo come case $(readlink "/proc/$$/exe") in */bash)..., anche se qui, mi piacerebbe utilizzare semplicemente: if [ -z "$BASH_VERSION" ]. ( echodovrebbe essere echo >&2). (Mi piaci .confo .shlibs(ma per i file sh) estensioni anche se potrebbe non aiutare gli evidenziatori della sintassi che si basano sull'estensione).
Stéphane Chazelas,

Sì, vedo questo .shlibs, in una specie di programma che carico, ma non ricordo, quindi ho iniziato a usarlo. Grazie mille per il suggerimento, modificherò la domanda con la versione readlink molto più bella. ;-)
Luciano Andress Martini

@ StéphaneChazelas L'evidenziazione della sintassi può essere attivata attraverso i metadati nei file stessi (almeno per Emacs e Vim), quindi la scelta dell'estensione del nome è irrilevante sotto questo aspetto.
Kusalananda
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.