Was ist der Unterschied zwischen den Shell-Zugriffstools von Linux und Windows?
In manchen Programmiersprachen (Websprachen meiner Erfahrung nach) müssen Sie, wenn Sie einen Befehl ausführen müssen, den Pfad zu cmd.exe in Windows angeben, während Sie in Linux direkt auf die Shell zugreifen ... Was ist der Unterschied und warum? Was genau treffen die Sprachen in beiden Systemen, wenn Sie einen Befehl ausführen os.execute()
?
EDIT: Dies ist eine eher theoretische Frage und hat nichts mit Programmierpraktiken zu tun. Mir ist bewusst, dass es sich möglicherweise nicht einfach ist, dieses Thema zu erklären, daher reicht ein Link oder die Anzeige der richtigen Richtung zum Eintauchen ebenfalls aus.
Hier ist eines der Beispiele für Coldfusion (das ist ein ziemlich merkwürdiges, verrücktes Beispiel, muss ich sagen):
<cfexecute name="C:\Windows\System32\cmd.exe" arguments="echo Hm" />
Antwort1
Nun, ich werde versuchen, es einfach zu halten (breites Thema)
Der Unterschied zwischen Windows und Linux ist klar, der Kern ist nicht derselbe, ich werde nicht näher auf die Geschichte eingehen (schauen Sie bei Wikipedia nach, wenn Sie neugierig sind ;), aber Linux bevorzugt tendenziell Skripte, weil der Benutzer damit die Installation oder das Betriebssystem nach Wunsch anpassen kann, während Windows .exe verwendet, die den Registrierungsschlüssel zum Ausführen von Programmen ändern.
Warum Sie den gesamten Pfad eingeben müssen, um die Windows-EXE auszuführen, ist ganz einfach (ich werde hier nicht in eine lange und tiefgehende Erklärung gehen): Windows verwendet die globalen Variablen nicht wirklich (einfache Erklärung: der Registerschlüssel benötigt diese nicht wirklich, um die EXE auszuführen), während Linux dazu neigt, globale Variablen zu bevorzugen. Tatsächlich können Sie in Linux problemlos globale Variablen hinzufügen, die auf Ihr Skript verweisen.
Wenn Sie also ein Linux-Skript ausführen möchten, geben Sie cmd ein (zeigen auf die globale Variable, die den Pfad enthält), und dann passiert der Zauber. Bei Windows sind Sie die globale Variable, also müssen Sie den Pfad zur auszuführenden EXE angeben. Sie können Ihre eigene globale Variable in Windows erstellen und sie wie Linux verwenden, wenn Sie möchten, aber persönlich mache ich das nicht gerne.
Hoffe, Sie verstehen das Prinzip etwas besser.
Antwort2
Es handelt sich um völlig unterschiedliche Plattformen und die meisten Befehle, die über die jeweiligen Shells ausgeführt werden, wären inkompatibel, mit Ausnahme vonCygwinunter Windows, das dieselben Befehle wie eine Linux-Shell verwendet.
Als Faustregel gilt: Versuchen Sie, betriebssystemspezifische Aufrufe nach Möglichkeit zu vermeiden.
Antwort3
Innerhalb von Python kann ich sagen:
>>> rc = os.system('echo yes')
yes
>>>
Dies funktioniert unter Windows, Linux oder jeder Unix-Variante gleich.
Ich denke, dass das von Ihnen beobachtete Phänomen spezifisch für die Portabilität der betreffenden Sprache ist.
Beachten Sie, dass die Teilmenge der Befehlszeichenfolgen, die identische Ergebnisse liefern würden, sehr begrenzt ist. Windows und Unix haben nur sehr wenige Befehle gemeinsam.