Ubuntu-Terminal mithilfe einer Batchdatei unter Windows mit einem Befehl öffnen?

Ubuntu-Terminal mithilfe einer Batchdatei unter Windows mit einem Befehl öffnen?

Ich automatisiere viele Prozesse unter Windows mithilfe von Batchdateien und Putty.

Z. B. ( login_server7.bat ):

start C:\Users\Jack\Documents\putty.exe -ssh 1.1.1.1 -l user123 -pw "bleh"

Wie kann ich ein Ubuntu-Terminal starten und nach dem Öffnen einer Datei automatisch einen Befehl ausführen?

Anstatt das Ubuntu-Terminal manuell zu öffnen und meine Befehle einzugeben?

Ich kann sonst nichts zu diesem Thema finden. Grüße

Antwort1

Die ausführbare Datei von WSL ist C:\Windows\System32\wsl.exe. Sie können einfach wslin die Windows-Eingabeaufforderung eingeben und werden bei der Standard-WSL-Instanz angemeldet. Oder geben Sie ein, wsl -hum eine Liste aller verfügbaren Optionen zu erhalten. In Batchdateien können Sie Folgendes verwenden:

C:\Windows\System32\wsl.exe <your script or command>

Oder wenn Sie den Befehl als Root ausführen müssen:

C:\Windows\System32\wsl.exe sudo <your script or command>

Wahrscheinlich ist es korrekter, zu verwenden wsl -e -- <command>, aber das obige funktioniert für mich gut. Hier ist ein ausführlicheres Beispiel:Ubuntu 18.04 auf WSL-Cron-Daemon läuft nach dem Neustart nicht.

Antwort2

Wie in ps4080der Antwort von erwähnt, ist die richtige Vorgehensweise wsl -e -- <command>(oder normalerweise wsl -e <command>).

Allerdings gibt es bei dieser Technik tatsächlich einige Nuancen, auf die Sie stoßen könnten, und es ist gut zu wissen, was bei jedem einzelnen Zauberspruch passiert, damit Sie bei Bedarf den richtigen verwenden können:

wsl <command>

  • Führt die Standard-Shell für den aktuellen Benutzer aus
  • ... als Shell ohne Anmeldung und ohne interaktive Funktion
  • ... in dem vom besitzenden Windows-Prozess übergebenen Verzeichnis
  • Läuft <command>in dieser Shell

Abhängig von Ihrer Shell können Sie dies wie folgt sehen wsl ps -eH:

  PID TTY          TIME CMD
    1 ?        00:00:00 init
   18 ?        00:00:00   init
   19 ?        00:00:00     init
   20 pts/0    00:00:00       fish
   28 pts/0    00:00:00         ps

Beachten Sie, dass dies schwierig zu erkennen ist, wenn es bashsich um Ihre Standard-Shell handelt, da -cdies zu einem impliziten führt exec.

Die Tatsache, dass dies im Verzeichnis des entsprechenden Windows-Prozesses ausgeführt wird, kann praktisch sein, da Sie Folgendes tun können:

wsl ls -lh

... in PowerShell, um „menschenlesbare“ Dateigrößen zu erhalten, wasüberraschend schwierig zu machenansonsten.

Der schwierigste Teil davon ist der zweite Qualifizierer. WSL führt Ihre Shell als nicht-loginierte, nicht-interaktive Shell aus, wenn sie auf diese Weise gestartet wird. Das bedeutet, dass ~/.bashrcund~/.bash_profilenichtbeim Start als Quelle verwendet. Dies kann zu Verwirrung führen, wenn versucht wird, einen Befehl auszuführen, der erfordert, dass etwas in den Startdateien getan wird (z. B. das Festlegen einer Umgebungsvariablen).

wsl -e <command>

  • Läuft<command> alsdie Muschel
  • ... in dem vom Eigentümerprozess übergebenen Verzeichnis

Dadurch -ewird Ihre Standard-Shell vollständig umgangen.

> wsl ps -eH
  PID TTY          TIME CMD
    1 ?        00:00:00 init
    7 ?        00:00:00   init
    8 ?        00:00:00     init
    9 pts/0    00:00:00       ps

Das kann seinleichteffizienter, da Sie den Start-Overhead der Shell vermeiden, aber es ist normalerweise nicht der Rede wert.

wsl -e bash -lic <command>

  • Läuft bashals Ihre Shell (unabhängig davon, ob es die Standard-Shell ist oder nicht)
  • Erzwingt eine Anmeldung, interaktive Shell ( -li), so dass ~/.bashrcund ~/.bash_profile(und/oder andere) als Quelle verwendet werden
  • ... in dem vom besitzenden Windows-Prozess übergebenen Verzeichnis
  • Läuft <command>in dieser Shell

Dies ist die zu verwendende Version, wenn der Befehl etwas aus Ihrer Startkonfiguration benötigt.

verwandte Informationen