Wie führe ich Linux-Befehle von R über bash unter dem Windows-Subsystem für Linux (WSL) aus?

8

Die WSL unter Windows 10 ermöglicht die Ausführung von Linux-Befehlen und Befehlszeilentools über bash.exe. Sehr nützlich kann ein Linux-Tool / -Befehl über die Windows-Befehlszeile ( cmd.exe ) aufgerufen werden, indem es als Argument an bash.exe übergeben wird:

%Vor%

Dies ist sehr nützlich, da es Windows-basierten Skripten ermöglichen sollte, Windows- und Linux-Tools nahtlos zu kombinieren.

Leider konnte ich Linux-Befehle nicht über ein R-Skript aufrufen (siehe unten).

0) System

Win10 x64 + Jahrestag Update + WSL installiert

1) Vergleichsfälle, in denen der Aufruf von Linux-Befehlen funktioniert

Das Folgende funktioniert für mich; hier nur mit einem Beispiel Aufruf von ls gezeigt.

  • von der Windows-Befehlszeile (Eingabeaufforderung cmd.exe)

    %Vor%

    %Vor%
  • Gleiches funktioniert, wenn es von WinKey + R

  • gestartet wird
  • Funktioniert auch innerhalb einer .bat -Datei.

  • Es kann aus kompiliertem Code aufgerufen werden. Ich habe versucht mit Delphi XE2 32-Bit und 64-Bit mit ShellExecute :

    Zum Beispiel funktionieren diese (32 und 64 Bit):

    %Vor%

    Oder (32-Bit-Code):

    %Vor%

    Oder (64-Bit-Code):

    %Vor%

    All dies scheint zu funktionieren (und ShellExecute gibt 42 zurück).

2) Fehler beim Aufruf von Linux-Befehlen von R mit R 3.3.1 x64

Alle folgenden (und einige ähnliche Dinge, die ich versucht habe) scheitern mit dem Status 65535:

%Vor%

%Vor%

%Vor%

%Vor%

%Vor%

3) Frage

Wenn Beispiele unter 1) funktionieren, finde ich 2) sehr verwirrend. Fehle ich etwas Offensichtliches hier?

Ich wäre sehr dankbar für ein einfaches Beispiel, wo die Ausführung eines Linux-Befehls über bash.exe unter WSL funktioniert.

    
PhiS 07.08.2016, 21:13
quelle

1 Antwort

5

Ihre fehlerhaften Beispiele sollten jetzt ordnungsgemäß in Windows 10 Insider-Builds funktionieren & gt; = 14951 was führte viele" Interop "-Verbesserungen und neue Funktionen ein :

%Vor%

Erzeugt:

%Vor%     
Rich Turner 04.01.2017, 22:30
quelle