Auf Wikipedia heißt es im Artikel für .sh :
Informationen zum Typ der .sh-Dateierweiterung finden Sie unter Bourne-Shell .
Wie wäre es mit anderen Unix-Shells?
Ich weiß , dass der shebang verwendet wird in der Datei einen Interpreter zur Ausführung , um anzuzeigen, aber ich frage mich:
- Was sind die Vor- und Nachteile von Dateierweiterungen gegenüber nicht vorhandenen Dateierweiterungen?
shell-script
files
scripting
filenames
conventions
Amelio Vazquez-Reina
quelle
quelle
bash script.sh
(odersh
natürlich).Antworten:
Ich würde nur rufen
.sh
etwas , das ist gemeint tragbar zu sein (und hoffentlich ist tragbar).Ansonsten finde ich es einfach besser die Sprache zu verstecken. Der aufmerksame Leser wird es ohnehin in der Shebang-Zeile finden. (In der Praxis werden Suffixe
.bash
oder.zsh
usw. nur selten verwendet.)quelle
Ich würde sagen, dass es aus technischen Gründen keine "guten Praktiken" für Dateierweiterungen gibt: Unix / Linux / * BSD-Dateisysteme unterstützen keine Erweiterungen an sich. Was Sie eine Erweiterung nennen, ist lediglich ein Suffix eines einzelnen Dateinamens. Das ist anders als bei den Dateisystemen und Betriebssystemen VM / CMS, VMS, MS-DOS und Windows, bei denen eine spezielle Stelle in der Inode-Moral-Entsprechung für eine Erweiterung reserviert ist.
Ich finde es ein bisschen albern, das Suffix ".sh" oder ".ksh" oder ".bash" auf den Namen einer Shell-Skriptdatei zu setzen. Ein Programm ist ein Programm: Es gibt keinen Vorteil, zu unterscheiden, was ausgeführt wird. Kein Unix- oder Linux-Kernel oder was auch immer hat beschlossen, einen Interpreter für eine Datei aufzurufen, nur wegen eines Dateinamensuffix. Es wird alles durch die
#!
Zeile oder eine andere "magische Zahl" -Sequenz von Bytes am Anfang der Datei erledigt . Die Entscheidung, was basierend auf einer Dateinamenerweiterung ausgeführt werden soll, ist einer der Faktoren, die Windows zu einem Malware-Magneten machen. Sehen Sie sich an, wie viele Windows-Malware-Betrugsfälle eine Datei mit dem Namen "something.jpg.exe" enthalten. In neueren Windows-Versionen wird standardmäßig die Erweiterung ".exe" nicht angezeigt.Was Sie vielleicht für einen Direktbefehl halten, ist sowieso oft ein Shell-Skript. Manchmal
cc
war es ein Sh-Skript,firefox
ist ein Sh-Skript,startx
ist ein Sh-Skript. Ich glaube nicht, dass es einen kognitiven oder organisatorischen Vorteil hat, ein Skript mit dem Suffix ".sh" zu kennzeichnen.quelle
.sh
Erweiterung geben, müssen Sie diese.sh
beim Starten als Teil des Befehlsnamens eingeben. Das ist der Hauptgrund, warum ich diese Erweiterung nicht gerne einbaue (dasselbe gilt für alles, was eine Shebang-Linie hat). Übrigens ist das Problem in Windows nicht das.exe
Präfix an sich (es ist trivial, eine ausführbare Datei unterimage.jpg
Linux zu erstellen), sondern die Tatsache, dass Windows diese Erweiterung normalerweise verbirgt, kombiniert mit der Tatsache, dass die Aktion zum Starten einer ausführbaren Datei und erforderlich ist Ein Dokument zu öffnen ist genau dasselbe.Als einer, der in einer Vielzahl von? Nix-Umgebungen gearbeitet hat, musste ich in einer Vielzahl von Shells schreiben. Ob Sie es glauben oder nicht, über Plattformen hinweg sind die Schalen nicht gleich. Wenn Sie also Ihre persönliche Bibliothek in mehreren Shells verwalten (falls erforderlich), ist es sehr hilfreich, Erweiterungen zu verwenden, um die Shells zu identifizieren. Wenn Sie auf eine andere Plattform wechseln und die Shell etwas anders ist, wissen Sie auf diese Weise, auf welche Skripte Änderungen abzielen sollen. .sh .ksh .bsh .csh ...
quelle
#!
am Anfang des Skripts kein (z. B.#!/bin/bash
)?Wie Sie sagten, sind die Unix-Dateierweiterungen reine Informationen. Sie brauchen nur Ihr Skript, um einen korrekten Shebang zu haben und ausführbar zu sein.
Sie können entweder keine Erweiterung haben oder verwenden
.sh
.Ich persönlich verwende die folgenden Konventionen, unabhängig von der verwendeten Shell (csh, tcsh, bash, sh, ...):
.sh
für klassische Skripte, niedrig bis hochgradig.quelle
Sie sollten keine Erweiterung für ausführbare Dateien verwenden, da diese nicht austauschbar sind. Stellen Sie sich vor, Sie haben ein Shell-Skript
a.sh
und schreiben es in Python neua.py
. Jetzt müssen Sie jedes Programm ändern, das Ihr Skript aufruft. Sie haben Implementierungsdetails verloren.Die ganze Sache mit der Dateinamenerweiterung in Mircosofts Windows ist ein Durcheinander: Zum Beispiel, was hätte sein können
a.audio, b.audio, c.audio
, ista.mp3, b.wav, c.ogg
undd.picture, e.picture, f.picture
istd.jpeg, e.png, f.gif
. Die meiste Zeit ist es uns egal, in welchem Format das Audio oder Bild vorliegt. Außerdem müssen wir neue Benutzer über einen langen Zeitraum in alle Dateierweiterungen einweisen.quelle
*.sh
ich Debian soeben nicht kennengelernt habe, ist, dass Debianrun-parts
keine Skripte mit Erweiterungen ausführt, wie zum Beispiel in/etc/cron.*/
: archive.oreilly.com/pub/post/runparts_scripts_a_note_about.htmlShell-Skript-Erweiterungen sind sehr nützlich. Zum Beispiel schreibe ich oft Skripte, die mehrere Dateien in mehreren Sprachen enthalten (z. B. bash, awk und lua), in dasselbe Verzeichnis. Wenn ich nur in den Bash-Dateien nach einer Zeichenfolge suchen muss, ist diese Erweiterung sehr praktisch, um Fehlalarme zu vermeiden. Oder wenn ich eine Zeilenzählung meines gesamten Bash-Codes für dieses Projekt durchführen möchte.
Es ist mühsam, die Erweiterung beim Ausführen des Programms eingeben zu müssen, daher erstelle ich auch einen Symlink ohne die Erweiterung zur ausführbaren Hauptdatei, um sie zu bearbeiten / auszuführen, ohne die Erweiterung jedes Mal eingeben zu müssen. Symlinks sind billig und einfach.
quelle
Wie andere gesagt haben, kümmert sich die Shell nicht um Erweiterungen. Es ermöglicht jedoch eine schnelle Identifizierung von Dateien durch den Menschen. Ich sehe Dateien, die auf
.py
oder enden,.sh
und weiß schnell, wie sie (zumindest) lauten sollten. Wie Steve sagt, sind die Suche nach Dateierweiterung oder die Zeilenzählung auch praktische Überlegungen.quelle