Ich habe mich gefragt, was die Notwendigkeit ist, ausführbare Befehle in eine .sh
Datei einzufügen, um ein einzelnes Skript zu erstellen, da ich das gleiche tun kann, indem ich die Befehle in eine .txt
Datei einfüge und sie mithilfe von ausführbar mache chmod
.
Ich gehe davon aus, dass dies mit jeder der Dateierweiterungen durchgeführt werden kann. Ich bin ziemlich verwirrt über die Notwendigkeit einer .sh
Erweiterung. Jede Hilfe wäre sehr dankbar.
.txt
.txt suffix.txt, you.txt not.txt help.txt yourself.txt (or.txt anybody.txt else .txt) Understanding.txt What.txt Each.txt File.txt Is.txt There.txt For.txt.Antworten:
Wie Sie richtig herausgefunden haben, muss die Dateierweiterung nicht mit bestimmten Elementen übereinstimmen.
Auf Unix-ähnlichen Systemen werden Dateitypen normalerweise vom Inhalt der Datei (dh der "magischen Zahl" oder anderen charakteristischen Strukturen in den ersten Bytes) und nicht von ihrem Namen abgeleitet. Sie können auch die Erweiterung, die häufig für ausführbare Dateien ausgeführt wird, vollständig weglassen.
Überprüfen Sie den
file
Befehl, es zeigt Ihnen die Informationen, die es über einen Dateityp aus seinem Inhalt herausfinden kann.Für ein ausführbares Skript erwartet das System in der ersten Zeile einen sogenannten "shebang", der zB so aussieht
und gibt an, welches Programm als Interpreter mit der Skriptdatei als Argument ausgeführt werden soll. Wenn Sie eine Textdatei ohne einen solchen Schebang ausführen, wird Ihre Standard-Shell verwendet, dh Bash, um zu versuchen, sie zu interpretieren.
Auf Unix / Linux-Systemen sind Dateinamenerweiterungen daher meistens ein Hinweis (aber keine Garantie) für den menschlichen Benutzer, um schnell zu erkennen, was in einer bestimmten Datei zu erwarten ist. Es ist auch eine Konvention, die z. B. beim schnelleren Auffinden von Dateien helfen kann.
Beachten Sie jedoch, dass es einige Ausnahmen gibt, bei denen der Name und die Erweiterung von Bedeutung sind (z. B. einige Systemkonfigurationsdateien, die einer Namenskonvention folgen müssen, oder viele Bildbetrachter und -editoren benötigen ebenfalls die Erweiterung, um den Dateityp anzugeben).
Sie können auch einen Blick auf Haben Dateierweiterungen einen Zweck (für das Betriebssystem)?
quelle
Es gibt keine Dateierweiterung oder Dateityp in einem UNIX / Linux-Dateinamen.
Wie bereits erwähnt, kann der "Typ" mit dem Befehl file ermittelt werden, sofern die entsprechende Magie auf Ihrem System verfügbar ist. UNIX / Linux-Dateinamen können normalerweise alle verfügbaren Zeichen enthalten. Oft ist es jedoch hilfreich, eine Art Konvention für den Namen zu verwenden, damit sowohl Menschen als auch Maschinen über den Inhalt (und damit über die Verwendung des Inhalts) urteilen können.
Als Beispiel verwende ich oft ein Komma als erstes Zeichen des Dateinamens, um eine temporäre Datei anzugeben, anstatt so etwas wie die Zeichenfolge ".tmp" am Ende des Dateinamens zu verwenden. Das Ergebnis ist dasselbe: Eine Datei mit Daten, die möglicherweise nur für kurze Zeit erforderlich sind, für den Namen jedoch kein "." darin noch die Zeichenfolge "tmp". Dies kann manchmal Vorteile haben, z. B. beim Analysieren einer Liste von Dateinamen. Aber es ist MEINE Konvention und jemand anderes kann sich für eine andere Konvention entscheiden, die sogar ".tmp" als Namenskonvention für eine temporäre Datei verwendet.
Meine Antwort an Sie lautet also, dass es keine UNIX / Linux-Dateierweiterung gibt, sondern nur eine Reihe von Konventionen, die normalerweise wie die Dateierweiterungen aussehen, die in anderen Betriebssystemen und deren Dateisystemen verwendet werden.
quelle
"."
, sollen durch die Shell punktiert werden (sie können in einer Subshell nicht sinnvoll ausgeführt werden). Dementsprechend deaktiviere ich die Standardkonvention "initial dot = hidden file" in meinen Aliasen / Skripten, die verwendetls
werden, damit ich alle Dateien sehen kann, einschließlich der "versteckten". Ebenso deaktiviere ich unter Windows die Einstellung "Dateierweiterungen ausblenden".