Terminal: Unterstützt Linux-Pfade für `StartingDirectory` von WSL-Distributionen

Erstellt am 8. Mai 2019  ·  38Kommentare  ·  Quelle: microsoft/terminal

  • Ihre Windows-Build-Nummer: Microsoft Windows [Version 10.0.18362.86]

  • Was Sie tun und was passiert:
    Wenn Sie das Startverzeichnis für wsl in profiles.json festlegen, wird nicht auf das richtige Verzeichnis verwiesen.

  • Nehmen Sie die Konfiguration unten: -
{
        "startingDirectory": "C:/Users/joshj/AppData/Local/Packages/CanonicalGroupLimited.Ubuntu16.04onWindows_79rhkp1fndgsc/LocalState/rootfs/home/tackyunicorn",
        "guid": "{a2785f8e-72c9-4550-b406-697388644902}",
        "name": "Ubuntu",
        "colorscheme": "MonokaiVivid",
        "historySize": 9001,
        "snapOnInput": true,
        "cursorColor": "#FFFFFF",
        "cursorHeight": 25,
        "cursorShape": "vintage",
        "commandline": "wsl.exe",
        "fontFace": "Inconsolata for Powerline",
        "fontSize": 10,
        "acrylicOpacity": 1,
        "useAcrylic": true,
        "closeOnExit": true,
        "padding": "10, 10, 10, 10",
        "icon": "ms-appdata:///roaming/ubuntu.png"
}

Dies führt dazu, dass wsl im Stammordner gestartet wird
issue1

  1. In dieser Konfiguration: -
{
        "startingDirectory": "/home/tackyunicorn",
        "guid": "{a2785f8e-72c9-4550-b406-697388644902}",
        "name": "Ubuntu",
        "colorscheme": "MonokaiVivid",
        "historySize": 9001,
        "snapOnInput": true,
        "cursorColor": "#FFFFFF",
        "cursorHeight": 25,
        "cursorShape": "vintage",
        "commandline": "wsl.exe",
        "fontFace": "Inconsolata for Powerline",
        "fontSize": 10,
        "acrylicOpacity": 1,
        "useAcrylic": true,
        "closeOnExit": true,
        "padding": "10, 10, 10, 10",
        "icon": "ms-appdata:///roaming/ubuntu.png"
}

Dies führt dazu, dass wsl im Windows-Benutzerordner gestartet wird
issue2

  • Was ist los / was sollte stattdessen passieren:
    Die Profileinstellung startingDirectory wird auf ein WSL-Profil nicht korrekt angewendet
Area-Settings Area-TerminalControl Help Wanted Issue-Feature Product-Terminal

Hilfreichster Kommentar

Es sieht so aus, als würde es Windows-Pfade erwarten, aber die direkte Übergabe der WSL-Fs-Pfade unter AppData funktioniert nicht. Die Verwendung des neuen UNC-Pfads funktioniert für mich:
"startingDirectory":"//wsl$/Ubuntu/home/cem/src" -> ~/src

So auch normale Windows-Standorte:
"startingDirectory":"C:/wd" -> /mnt/c/wd

Alle 38 Kommentare

Es sieht so aus, als würde es Windows-Pfade erwarten, aber die direkte Übergabe der WSL-Fs-Pfade unter AppData funktioniert nicht. Die Verwendung des neuen UNC-Pfads funktioniert für mich:
"startingDirectory":"//wsl$/Ubuntu/home/cem/src" -> ~/src

So auch normale Windows-Standorte:
"startingDirectory":"C:/wd" -> /mnt/c/wd

Hmm. Wir sollten vielleicht eine Einstellung hinzufügen, die darauf hinweist, dass das Startverzeichnis ein WSL-Pfad ist. Im Moment legen wir das Arbeitsverzeichnis der Client-App, die wir starten, nur manuell fest. Daher müssen wir speziell wissen, dass das Profil versucht hat, wsl zu sein, und unsere Logik für die Übergabe eines Arbeitsverzeichnisses anpassen.

Ein einfacher Hack wäre in der ~/.bashrc -Datei von wsl. Fügen Sie die Zeile hinzu
cd ~

Problem gelöst.

Ein einfacher Hack wäre in der ~/.bashrc -Datei von wsl. Fügen Sie die Zeile hinzu
cd ~

Problem gelöst.

Dies ist auch eine großartige Möglichkeit, um bei allem anderen, das Bash auf Ihrem Computer verwendet, seltsames und unerwartetes Verhalten zu erzielen. :Lächeln:

Diese Methode ist ein bisschen Arbeit. Wir könnten den Verteilungsnamen aus dem Befehl im Profil analysieren, sodass wsl.exe -d Ubuntu uns "Ubuntu" gibt, und diesen dann an Profile::EvaluateStartingDirectory . Wenn dies fehlschlägt, können wir vor dem Festlegen von %userprofile% \\WSL$\[distributionName][directory] auswerten und prüfen, ob dies ein gültiger Verzeichnispfad ist.

Oder wir könnten die Methode zu einer nicht statischen Methode machen und den Wert aus _commandline .

EDIT: Mir ist jetzt klar, dass dies nicht funktionieren wird. Der P9-Server wurde wahrscheinlich nicht gestartet, und wenn dies der Fall gewesen wäre, würden nicht alle Distributionen als verfügbare Freigaben unter dem UNC-Pfad geladen.

@ Sandeepkv93 - Dieser Hack ist nicht der beste. Wenn Sie beispielsweise in VS Code arbeiten und möchten, dass Ihr WSL-Terminal in Ihrem Projektverzeichnis geöffnet wird, wird dies verhindert. Ich werde auf jeden Fall auch andere Probleme verursachen

Meine Problemumgehung

"commandline" : "wsl.exe ~  -d WLinux"

Ich habe gerade meine /etc/passwd bearbeitet, nachdem ich einen neuen Benutzer als Home-Verzeichnis meines Windows-Benutzers /c/Users/MikeLloyd und startingDirectory ~ in meinem profile.json auf

Meine Problemumgehung

"commandline" : "wsl.exe ~"

Was ist, wenn ich das Standardverzeichnis auf ein Verzeichnis in C: festlegen möchte?
Ich habe "commandline" : "wsl.exe /mnt/c/Programming -d Ubuntu-18.04" und andere Verzeichnisse ausprobiert, mit oder ohne /mnt/c/ , mit oder ohne einfache Anführungszeichen und ohne Glück.

@LeoLozes Der zweite Beitrag in diesem Thread zeigt, wie Sie genau das tun, was Sie wollen.

In meinem Fall funktioniert es so
"startingDirectory": "//wsl$/Ubuntu-18.04/home/username"

Sowohl die wsl.exe ~ -d <distro> als auch //wsl$/home/<username> bei mir funktioniert, aber es wäre schön, wenn die startingDirectory von WSL und nicht von Windows interpretiert würden. ZB "startingDirectory": "$HOME/projects" sollte einfach funktionieren.

Es wäre schön, wenn Windows Terminal den Pfad konvertieren könnte. Ich folgte # 1060 in der Erwartung, meine WSL schnell zu starten, aber es funktioniert nicht, da Windows Explorer immer den ursprünglichen Pfad an Terminal übergibt.

Ich behebe dieses Problem mit

"startingDirectory": "//wsl$/Ubuntu-18.04/home/myname"

in Microsoft Windows [Version 10.0.18363.592] , ver 0.8.100910.0

Mein Weg, um WSL immer auf $ HOME zu starten:
Erstellen Sie den Link von wt.exe,
C: \ Benutzer \ IHRNAME \ AppData \ Local \ Microsoft \ WindowsApps \ wt.exe wsl.exe ~ -d Ubuntu
und stecken Sie es einfach in mein Startmenü und behalten Sie "launchDirectory" im Profil als null bei

Wenn Sie das "Startverzeichnis" nicht an "wsl.exe" übergeben, wird es immer von Ihrem aktuellen Verzeichnis aus gestartet.

Meine Lösung besteht darin, ein neues Profil mit der Startbefehlszeile wsl.exe ~ zu erstellen. Neueste Version im MS Store.

{
            "acrylicOpacity" : 1,
            "closeOnExit" : true,
            "colorScheme" : "Campbell",
            "commandline" : "wsl.exe ~",
            "cursorColor" : "#FFFFFF",
            "cursorShape" : "bar",
            "fontFace" : "Consolas",
            "fontSize" : 12,
            "guid" : "{*********************************}",
            "historySize" : 9001,
            "icon" : "ms-appx:///ProfileIcons/{0caa0dad-35be-5f56-a8ff-afceeeaa6101}.png",
            "name" : "Ubuntu home",
            "padding" : "0, 0, 0, 0",
            "snapOnInput" : true,
            "startingDirectory" : "%USERPROFILE%",
            "useAcrylic" : true
},

Einfache Lösung
"StartingDirectory": "// wsl $ / Ubuntu / home /",

@ troy-mac, das buchstäblich im "home" -Verzeichnis startet, nicht in Ihrem _ home_-Verzeichnis. In den obigen Antworten finden Sie unzählige funktionierende Lösungen ( Beispiel ).

Ich benutze Ubuntu und meine Problemumgehung ist:
"commandline" : "ubuntu.exe"

Einfache Lösung
"StartingDirectory": "// wsl $ / Ubuntu / home /",

Ich weiß nicht einmal, warum sie 👎🏻 geben

Danke, ich habe es herausgefunden ... Als nächstes muss die Datei /etc/resolv.conf überschrieben werden. Versuchte ein paar Workarounds ohne Arbeit

Wie starte ich WSL in einem bestimmten Verzeichnis?

Wenn ich beispielsweise bei ~/dev beginnen möchte, was schreibe ich in die Eigenschaft commandline ?

Ich habe "commandline": "wsl.exe ~/dev" ausprobiert, aber einen Fehler wie den folgenden erhalten:

/bin/bash: /home/myname/dev: Is a directory

[process exited with code 126]

Bearbeiten:
nvm. Finde es heraus, indem du schreibst

"startingDirectory":"//wsl$/Ubuntu/home/myname/dev"

Mit der neuesten Version vor ein paar Tagen (profile.json wurde in settings.json umbenannt) funktioniert startingDirectory jetzt überhaupt nicht mehr. Keine einzige Variation in diesem Thread funktioniert überhaupt für mich. Sieht jemand anderes dasselbe?

Das Festlegen von startingDirectory hat bei mir funktioniert, aber es scheint, dass Sie es in dem von Ihnen verwendeten Profil platzieren müssen. So zum Beispiel Ubuntu:

            {
                "guid": "{2c4de342-38b7-51cf-b940-2309a097f518}",
                "hidden": false,
                "name": "Ubuntu",
                "source": "Windows.Terminal.Wsl",
        "startingDirectory":"//wsl$/Ubuntu/home/me/dev"
            },

Ich habe 4 WSL-Distributionen installiert, Ubuntu, Debian, Kali-Linux und CentOS. Wenn ich die Einstellung "startingDirectory": "\\\\wsl$\\<distroname>\\home\\jakob" respektiert Debian größtenteils das Startverzeichnis, aber nicht immer, die anderen nicht. Wenn ich jedoch einen zweiten Tab mit einem der anderen 3 Distos öffne, öffnen sie sich immer in ~ Es scheint, dass die Verwendung von "startingDirectory": "//wsl$//<distroname>/home/jakob" keinen Unterschied macht, aber die Verwendung von \\ ist zuverlässiger

Bearbeiten: Ich verwende Insider Preview Build 19619 und wsl2. Es scheint, dass die VMs, wenn sie betriebsbereit sind, die Einstellung StartingDirectory berücksichtigen. Wenn die VMs gestoppt sind und beim Öffnen einer Registerkarte gestartet werden müssen, ist dies nicht der Fall.

Einfache Lösung
"StartingDirectory": "// wsl $ / Ubuntu / home /",

Ich weiß nicht einmal, warum sie 👎🏻 geben

Es sollte / home / username not / home sein

Um etwas zu wiederholen, was bereits gesagt wurde , legen Sie Ihr Startverzeichnis für eine bestimmte WSL-Instanz fest:

    "profiles": [
        {
            "guid": "{2c4de342-38b7-51cf-b940-2309a097f518}",
            "hidden": false,
            "name": "Ubuntu",
            "source": "Windows.Terminal.Wsl",
            "fontFace": "Cascadia Code",
            "fontSize": 12,

            // THIS                 vvvvvvvvvvvv
            "commandline": "wsl.exe ~ -d Ubuntu"
        }
    ],

Ersetzen Sie "Ubuntu" durch den Namen Ihrer Distribution.

Ich habe 4 WSL-Distributionen installiert, Ubuntu, Debian, Kali-Linux und CentOS. Wenn ich die Einstellung "startingDirectory": "\\\\wsl$\\<distroname>\\home\\jakob" respektiert Debian größtenteils das Startverzeichnis, aber nicht immer, die anderen nicht. Wenn ich jedoch einen zweiten Tab mit einem der anderen 3 Distos öffne, öffnen sie sich immer in ~ Es scheint, dass die Verwendung von "startingDirectory": "//wsl$//<distroname>/home/jakob" keinen Unterschied macht, aber die Verwendung von \\ ist zuverlässiger

Bearbeiten: Ich verwende Insider Preview Build 19619 und wsl2. Es scheint, dass die VMs, wenn sie betriebsbereit sind, die Einstellung StartingDirectory berücksichtigen. Wenn die VMs gestoppt sind und beim Öffnen einer Registerkarte gestartet werden müssen, ist dies nicht der Fall.

Dies liegt daran, dass der Ordner // wsl $ / erst initialisiert wird, wenn eine wsl-Instanz gestartet wird. Die erste Instanz startet also nicht in ~, sondern die anderen in ~, da die erste Instanz den Ordner // wsl $ / initialisiert hat

@ troy-mac, das buchstäblich im "home" -Verzeichnis startet, nicht in Ihrem _ home_-Verzeichnis. In den obigen Antworten finden Sie unzählige funktionierende Lösungen ( Beispiel ).

@antoineco Ich verwende Ubuntu (nicht sicher, ob das wichtig ist), aber es bringt mich in mein Home-Verzeichnis / home / troymac, sodass ich für mich die Ergebnisse bekomme, nach denen ich gesucht habe ...

@ troy-mac Ich habe gerade Ubuntu ausprobiert und das tut es nicht. Sie haben wahrscheinlich eine andere Direktive, entweder in Ihrer Einstellungsdatei oder in Ihrer bashrc-Datei, aber dies allein bringt Sie nicht in Ihr Home-Verzeichnis.

Mein Hauptpunkt war jedenfalls, dass wir diesen Thread frei von fehlerhaften Informationen halten sollten. Es wurde eine funktionierende Lösung vorgeschlagen . Lassen Sie uns die Benutzer dazu ermutigen, diese zu verwenden, anstatt ungenaue alternative Tricks auszutauschen.

Für mich (möglicherweise wegen zsh) funktioniert die Problemumgehung "commandline": "wsl.exe /mnt/d/workspace -d Debian" nicht:

zsh:1: permission denied: /mnt/d/workspace

[process exited with code 126]

aber "startingDirectory": "D:/workspace" ohne "commandline" funktioniert gut, wie es vorgeschlagen in den Anfängen.

Es gibt keine Welt, in der die Angabe des Verzeichnisses durch Ausführen von wsl /directory funktioniert. Das führt immer (nicht nur bei Verwendung von zsh!) Dazu, dass die Shell versucht, das Verzeichnis auszuführen und dann zu beenden. Das willst du nie.

Gibt es hierzu Neuigkeiten?

@maximgeerinck Nein. Wir werden sicherstellen, dass dieser Thread aktualisiert wird, wenn es einen gibt. Kann ich in der Zwischenzeit die Schaltfläche Abonnieren empfehlen?
image
Auf diese Weise werden Sie über Aktualisierungen dieses Threads informiert, ohne unnötig alle in diesem Thread anzupingen ☺️

Hallo, alles was ich weiß, ich habe ein paar Daumen runter für diesen Vorschlag, den ich zuvor gepostet habe, aber ich habe gerade WSL und Ubuntu-20.04 auf einem neuen System installiert und alles, was ich getan habe, war, die folgenden Zeilen zu meiner settings.json-Datei hinzuzufügen und es zu 100% arbeitete dafür, mich in mein Home-Verzeichnis zu legen. Ich sage nicht, dass es für alle funktionieren wird, da ich nicht sicher bin, ob die Daumen nach unten Benutzer dies tatsächlich getestet haben oder nicht, aber es hat für mich auf 2 verschiedenen Systemen sowohl mit Ubuntu-20.04 als auch mit 18.04 funktioniert. Ich denke, es ist am einfachsten, es zuerst zu versuchen. Wenn es bei Ihnen nicht funktioniert, probieren Sie ein paar andere Vorschläge in diesem Thread aus.

"StartingDirectory": "//wsl$/Ubuntu-20.04/home/troy-mac"
"StartingDirectory": "//wsl$/Ubuntu-18.04/home/troy-mac"

oder verwenden Sie @antoineco Vorschlag, der die ganze Zeit funktionieren kann ...
"Kommandozeile": "wsl.exe ~ -d Ubuntu"

@ troy-mac Ich spreche hier für mich selbst, aber der Daumen nach unten war eine Möglichkeit zu sagen _ "Warnung, Leser. Die in dieser Nachricht vorgeschlagene Lösung funktioniert nicht für alle, bitte beziehen Sie sich stattdessen auf die akzeptierte Lösung" _. Es war kein Versuch, dich zu entlassen.

Wie Sie sagten, funktioniert "commandline": "wsl.exe ~ -d <distro_name>" (https://github.com/microsoft/terminal/issues/592#issuecomment-504947429) in nahezu jedem Fall. Stellen Sie also sicher, dass diese Lösung für andere Benutzer sichtbar ist durch dieses Problem, anstatt zu versuchen, neue, ungefähre Lösungen zu finden.

Bei der Installation von Ubuntu kann verwendet werden

"startingDirectory":"\\\\wsl$\\[DISTRONAME]\\home\\[USERNAME]"

Wenn Sie nicht sicher sind, was [DISTRONAME] ist, gehen Sie wie folgt vor:

  1. Win + R.
  2. \\ wsl $
  3. Drücke Enter

Jetzt erhalten Sie das Fileshare in einem Explorer. Fx

image

Folgen Sie einfach dem Pfad, von dem aus Sie beginnen möchten, wenn Sie eine neue Registerkarte in Windows Terminal öffnen. Merken:

  1. vier Schrägstriche am Start und
  2. Zwei Schrägstriche zwischen den Ordnernamen

Mögen:
image

bei der Konstruktion der startingDirectory . Starten Sie Windows Terminal neu und los geht's.

War diese Seite hilfreich?
0 / 5 - 0 Bewertungen

Verwandte Themen

Wid-Mimosa picture Wid-Mimosa  ·  3Kommentare

zadjii-msft picture zadjii-msft  ·  3Kommentare

dev-logan picture dev-logan  ·  3Kommentare

carlos-zamora picture carlos-zamora  ·  3Kommentare

wkbrd picture wkbrd  ·  3Kommentare