Hier sind einige grundlegende Unix-Informationen. Es werden nicht viele "El Capitan" -spezifische Details zur Verfügung gestellt, sie sollten jedoch nicht erforderlich sein, damit die Dinge funktionieren. (Ich verstehe, dass ein Upgrade auf "El Capitan" die Dinge kaputt gemacht hat. Vielleicht hat sich das geändert, was sich in Ihrem Weg befindet, oder einige Berechtigungen geändert. Im Folgenden werden Details beschrieben, wie die Dinge funktionieren.
In DOS ist eine Batchdatei eine Textdatei, die mit ".BAT" endet (Groß- und Kleinschreibung wird nicht berücksichtigt, daher funktioniert ".bat" auch). Microsoft Windows folgt der DOS-Tradition. Jede Zeile in der Batchdatei ist ein Befehl, der vom Befehlsinterpreter aus ausgeführt wird.
In Unix, einschließlich Mac OS X, sollte eine richtige "Shell-Skript" -Datei einen richtigen Header und die richtigen Berechtigungen haben. Nach dem Header ist jede Zeile in der Batchdatei ein Befehl, der vom Befehlsinterpreter aus ausgeführt werden soll.
Beachten Sie, dass diese Beschreibungen meist gleich sind. Die Skriptdatei besteht hauptsächlich aus einer Liste von Befehlen, die ausgeführt werden sollen. Befehle, die zwischen DOS und Unix gleich sind, wie "cd .." oder die Namen der ausführbaren Dateien im PATH, funktionieren möglicherweise mit beiden Dateitypen gleich gut.
Wenn Sie eine Unix-Skriptdatei hatten, die besagte:
#!/bin/sh @Echo Off echo hello cd . more < readme.txt
Dann würde die erste Zeile der Datei einen harmlosen Fehler in DOS / Windows verursachen, die zweite Zeile der Datei würde zu einer harmelss-Fehlermeldung in Unix führen und der Rest der Datei könnte in beiden Umgebungen identisch funktionieren.
Ob dies für Sie tatsächlich gut ist oder nicht, hängt in hohem Maße davon ab, welche Befehle Sie verwenden. Zum Beispiel kann " cd bin
" in beiden Umgebungen gut funktionieren, aber DOS / Windows verwenden einen Backslash als Verzeichnisseparator, während Unix einen Schrägstrich verwendet. Daher funktionieren einige Befehle möglicherweise nicht gut.
Der beste Weg, um vorhersagen zu können, wie gut eine bestimmte Batchdatei funktionieren würde oder nicht, ist, wenn wir den Inhalt der Batchdatei kennen. Deshalb fragte der Kommentar von Barlop nach dem Inhalt der Batchdatei.
Zu Ihrer Frage (aus einem Ihrer Kommentare), welche Erweiterung verwendet werden soll: In DOS / Windows lautet die Antwort ".BAT" (jede Menge an Kleinbuchstaben ist in Ordnung, daher ist ".bat" auch in Ordnung.) In Unix ist das Die gebräuchlichsten Standards sind "keine" (keine Erweiterung) oder " .sh
". In Unix spielt die Erweiterung jedoch keine Rolle. Entscheidend ist, ob die Datei über die erforderlichen Berechtigungen verfügt und möglicherweise mit dem entsprechenden Header beginnt. Stellen Sie also sicher, dass diese Dinge richtig sind. (Die Kopfzeile ist die erste Zeile, die in meinem vorherigen Beispiel angezeigt wurde. Die Berechtigungen können mit "chmod a+x filename.bat
msgstr "Geben Sie jedoch den tatsächlichen Speicherort des Dateinamens an." Wenn Sie die Datei in Unix ausführen, müssen Sie den gesamten Dateinamen der Skriptdatei angeben, einschließlich der Erweiterung ".bat". (Wenn Sie nicht möchten Machen Sie einfach einen Symlink und lassen Sie den Symlink "gonow" auf "gonow.bat" (oder was auch immer passend ist) verweisen.
Die andere Möglichkeit, dies unter Unix zu tun, besteht darin, die .BAT-Datei mit einer anderen DOS-Software auszuführen. B. COMMAND.COM in Wine oder CMD.EXE in WINE oder andere Wine-Varianten wie Crossover oder andere Software wie DOSBox oder DOSemu. Wenn Sie diese Software verwenden, die ähnlich wie DOS funktioniert, kann diese Software die Datei möglicherweise ausführen, ohne dass Sie die Erweiterung ".bat" angeben müssen.
Eine andere Alternative kann darin bestehen, einfach eine Shell-Skriptdatei zu verwenden, die Java ausführt (da der Inhalt der Batchdatei, die an anderer Stelle erwähnt wird, Java ausführt, zeigt, dass Java ausgeführt wird) und ignorieren Sie den Versuch, eine Datei zu verwenden, die mit der Erweiterung ".bat" endet. (Es wäre also keine .bat-Datei, sondern ein Shell-Skript oder ein symbolischer Link.)