Ein offizieller Standard / eine offizielle Konvention für eine Dateierweiterung für Shell-Skripte zur Quelle

10

Ich habe mich gefragt, ob es eine Konvention für Dateityp-Erweiterungen für Shell-Skripte gibt, die Sie anstelle der Ausführung als Quelle verwenden möchten. Beispielsweise:

  1. Wenn ich dieses Skript in einer Subshell ausführen möchte.

    ./script.sh 
  2. Wenn ich daran denken möchte, dieses Skript von der aktuellen Shell aus auszuführen.

    . script.source 

Gibt es im zweiten Beispiel eine Konvention (wie zum Beispiel POSIX) für einen Dateityp? So etwas wie .sourceoder .sourceme?


Aktualisieren

Diese Frage fragt nicht nach einer Meinung. Ich habe klar gesagt, dass ich gerne wissen würde, ob es eine standardisierte Dateierweiterung für diese Art von Skripten gibt. Diese Frage basiert noch weniger auf Meinungen als diese gut aufgenommene Frage zu einem ähnlichen Thema ( Verwenden Sie die Erweiterung .sh oder .bash für Bash-Skripte? ).

Mateusz Piotrowski
quelle
1
Einige Leute denken, dass Shell-Skripte, die ausführbare Dateien ausführen können (dh sie beginnen mit #!/bin/shoder ähnlichem), keine Erweiterung haben sollten, da der Benutzer sich nicht darum kümmern sollte, in welcher Sprache das zugrunde liegende Skript geschrieben wurde.
the_velour_fog
1
Hängt davon ab, wofür es ist, Sie können env, rc, conf usw. haben
123
1
Manchmal @ 123 kommt es, wenn Sie etwas , das ist nützlich , und steckte es in bauen $PATH, kommen Sie zu verwenden , die ganze Zeit, so sein wie, ps, ls, curlund alle anderen Befehle, dann Sie beginnen zu bauen Shell Abschluss Funktionen drum herum, finde ich Es ist in Ordnung, die Erweiterung zu löschen. Aber ja, wenn Sie ein Shell-Skript beschaffen, das selbst nicht ausführbar ist, würde ich sie nicht verwenden chmod +xund sie benennen script.sh. Außerdem weise ich oft eine Erweiterung nur zu, weil ich sonst keine Syntaxhervorhebung in meinem Editor bekomme.
the_velour_fog
5
Es gibt keine Konvention. Wenn Sie in einem Unternehmen arbeiten oder an einem Freigabeprojekt (z. B. OpenSource) mitarbeiten, müssen Sie möglicherweise lokale Standards einhalten, aber es gibt keine De-facto-Konvention.
Stephen Harris
1
Das Wort "Konvention" (was # 2 bedeutet) führt wahrscheinlich zu "meinungsbasierten" Antworten. Die Open Group-Spezifikation für Source erzwingt keinen Namensstandard.
Jeff Schaller

Antworten:

18

Ich würde .sh(für Dateien in der POSIX- shSprache, .bashfür nicht sh-kompatible bashDateien, dh die Erweiterung gibt die Sprache an, in der das Skript geschrieben ist) für Dateien verwenden, die bezogen werden sollen (oder allgemeiner nicht ausgeführt werden sollen)). und keine Erweiterung für Dateien, die ausgeführt werden sollen.

Sie können auch Folgendes hinzufügen:

#! /bin/echo Please-source

she-bang, so dass Sie bei einer versehentlichen Ausführung (obwohl ich erwarten würde, dass diese Dateien keine Ausführungsberechtigungen erhalten sollten, was die Ausführung bereits verhindern würde) eine Benachrichtigung erhalten, dass sie stattdessen bezogen werden sollten.

Stéphane Chazelas
quelle
Sie können auch beenden, wenn das Skript nicht bezogen wird ( stackoverflow.com/q/2683279/4694621 )
Mateusz Piotrowski
4

Im Fall von Quelldateien denke ich, dass der beste Weg .conf für Dateien ist, die Ihr Skript konfigurieren, und .shlib oder .shlibs für Dateien, die Funktionen oder andere Dienstprogramme haben.

Wenn Sie verhindern möchten, dass Ihr Skript mit der falschen Shell ausgeführt wird und Hashbang nicht ausreicht, können Sie Folgendes verwenden:

if [ "$(readlink "/proc/$$/exe")" != "/bin/bash" ]; then
      echo >&2 "CAUTION: Wrong interpreter detected. You must use bash."
      exit 1
fi
Luciano Andress Martini
quelle
1
Wenn Sie Linux-spezifisch verwenden möchten /proc/$$/exe, können Sie dies genauso gut tun case $(readlink "/proc/$$/exe") in */bash)..., obwohl ich hier einfach Folgendes verwenden würde : if [ -z "$BASH_VERSION" ]. ( echosollte sein echo >&2). (Ich mag Sie .confoder .shlibs(aber für sh-Dateien) Erweiterungen, obwohl es möglicherweise nicht hilft, Textmarker zu syntaxieren, die auf der Erweiterung basieren).
Stéphane Chazelas
Ja, ich sehe diese .shlibs in einer Art Programm, das ich nicht lade, aber ich erinnere mich nicht, also habe ich damit angefangen. Vielen Dank für den Tipp, ich werde die Frage mit der Readlink-Version viel schöner bearbeiten. ;-)
Luciano Andress Martini
@ StéphaneChazelas Die Syntaxhervorhebung kann durch Metadaten in den Dateien selbst ausgelöst werden (zumindest für Emacs und Vim), sodass die Wahl der Dateinamenerweiterung in dieser Hinsicht irrelevant ist.
Kusalananda