Verwenden von Powershell in WSL

Verwenden von Powershell in WSL

Ich habe Powershell Core 6 auf meinem Windows 10 installiert und verwende WSL (Windows Subsystem for Linux) mit Ubuntu 18.04 LTS. Ich mag das Powershell 6-Terminal, es unterstützt viele der Tastaturkürzel, die man von einem Texteditor erwartet, zum Beispiel ctrl-backspacezum Löschen ganzer Wörter und ähnliches; es unterstützt sogar ctrl-homedas ctrl-endLöschen bis zum Anfang bzw. bis zum Ende. Das WSL-Terminal ist im Vergleich dazu jedoch miserabel. Es unterstützt nicht einmal ctrl-vEinfügen!!! Ich muss jedes Mal mit der rechten Maustaste klicken.

Ich weiß, wie man Powershell unter Linux installiert, aber trotzdem muss ich Powershell unter diesem Terminal verwenden. Gibt es eine Möglichkeit, die normale Powershell (unter Windows) zu verwenden, aber für mein Ubuntu 18.04 in WSL?

Antwort1

Alte Frage, die heute mit einer anderen Antwort (die auf dem richtigen Weg ist) nach oben verschoben wurde.

Kurze Antwort

Das größte Missverständnis bei der Frage selbst ist (wie @Biswapriyo in Bearbeitungen und Kommentaren anmerkte) die Verwechslung zwischenHülseUndTerminal.

Nein, Sie können „WSL“ nicht in einem „PowerShell-Terminal“ ausführen, da es so etwas wie ein „PowerShell-Terminal“ nicht gibt (siehe unten).

MancheHülseEntsprechungen zu den Hotkeys, zumindest:

Besonderheit Power Shell Bash/Zsh
Vorheriges Token löschen Ctrl+Backspace Ctrl+W
Bis zum Zeilenanfang löschen Ctrl+Home Ctrl+U
Bis zum Zeilenende löschen Ctrl+End Ctrl+K

Erläuterung

Wenn Sie WSL ausführen, führen Sie einHülseDies ist bashdie Standardeinstellung, könnte aber auch zsh, oder fishoder eine Vielzahl anderer Werte sein.

PowerShell ist außerdem einHülse.

Diese Granaten laufen in einemTerminal, das ist das Fenster, das Ihnen die Shell präsentiert. Standardmäßig in Windows 10,alleShells werden standardmäßig in der alten „Windows-Konsole“ ausgeführt. Dies scheint das zu sein, was Sie ausführen (zumindest zu dem Zeitpunkt, als Sie die Frage gestellt haben).

Andere Terminals könnten die PowerShell ISE sein (die meines Wissens größtenteils durch Visual Studio Code ersetzt wurde) oderWindows-Terminal(installierbar aus dem Windows Store). Es gibt noch einige andere. Wenn Sie ein anderes Terminal installieren, PowerShell (alsHülse) kann in diesem Terminal ausgeführt werden, ebenso wie Ihre WSL-Shell und die CMD-Shell.

Randbemerkung: Windows Terminal ist als Ersatz für die Windows-Konsole konzipiert und sollte letztendlich (in Windows 11) als Standardkonsole festgelegt werden können.

Wenn Sie eine Taste oder einen Tastenakkord drücken (z. B. Ctrl+ End), durchläuft diese Taste Folgendes:

  • Windows prüft zunächst, ob Handler dafür vorhanden sind (z. B. Alt+, F4um den Befehl „Beenden“ an eine Anwendung zu senden. Oder wenn Sie etwas wie AutoHotkey installiert haben, könnte die von Ihnen gedrückte Taste verarbeitet werdenDortErste.

  • Anschließend übergibt Windows es an denTerminalDas Terminal kann sich dafür entscheiden, dies zu handhaben.

    Beispielsweise wird Alt+ Entervon der Windows-Konsole verarbeitet, unabhängig davon, ob Ihre Shell CMD, PowerShell, Bash in WSL oder etwas anderes ist. Wenn dieser Hotkey gedrückt wird, wechselt das Terminal zwischen einem normalen Windows- und einem Vollbildmodus.

    Es gibt tatsächlichsehrwenige Tastenanschläge, die die Windows-Konsole selbst verarbeitet. Die meisten gehen zum nächsten Schritt über. Wenn Sie jedoch das Anwendungsmenü auswählen (klicken Sie auf das Symbol oben links) und zu Eigenschaften gehen, können Sie Ctrl+ Cund Ctrl+ Vzum Kopieren/Einfügen aktivieren.

    Windows Terminal ist ganz anders und verarbeitet standardmäßig viele weitere Tasten. Darüber hinaus können Sie fast alle davon konfigurieren. Beispielsweise wird ein neu installiertes Windows Terminal standardmäßigtutbinden Ctrl+ Veinfügen.

    Aber Ctrl+ Home, Ctrl+ Endund Ctrl+ Backspacehaben nichts zu tun mit demTerminal. Dies ist es, was @Biswapriyo Ihnen in den Bearbeitungen und Kommentaren verständlich machen wollte.

  • Wenn es nicht von Windows oder dem Terminal verarbeitet wird, gelangt der Tastendruck letztendlich zur Shell selbst.

    CtrlDa die Windows-Konsole + nicht verarbeiten kann V,Hülseempfängt es. CMD und PowerShell sind Windows-Anwendungen und können direkt mit der Windows-Zwischenablage kommunizieren, sodass sie das Ctrl+ abfangen V, den Text aus der Zwischenablage abrufen und in die Befehlszeile einfügen können.

    Andererseits bashhandelt es sich um eine Linux-Anwendung, die unter dem Linux-Kernel ausgeführt wird. Sie kann nicht mit der Windows-Zwischenablage kommunizieren. Deshalb ist sie hierfür auf das Terminal angewiesen.

    Darüber hinaus hat Ctrl+ Vin den meisten Linux-Shells eine fest etablierte Bedeutung, und diese Verwendung ist (glaube ich) sogar älter als die Windows-Verwendung. Siehediese Frageund die erste Antwort dort für Einzelheiten.

    Für die anderen Bearbeitungstasten gibt es, wie @YorSubs in dieser Antwort anmerkte, Äquivalente. Und wenn etwas in der Shell Ihrer Wahl nicht standardmäßig gebunden ist, ist es fast immer konfigurierbar.

Antwort2

Der Hotkey, auf den Sie verweisen, ist nicht nur für das PowerShell-Terminal v6+ verfügbar. Sie können dies tun, seit es PowerShell gibt. Sogar cmd.exe verfügt seit Jahren über diese Tastatur-Hotkeys.

Haben Sie sich die neuen 'Windows-Terminal' für Ihren Anwendungsfall?

Was die Leute hier sagen wollen, ist, dass WSL speziell für den Anwendungsfall interaktiver Linux-Befehlszeilen existiert und nicht für PowerShell-spezifische Dinge. Wenn MS keine Möglichkeit bietet, das zu tun, wonach Sie suchen, müssen Sie sich an 3rdP wenden.

Einstellungsdatei für Windows Terminal – konfigurieren Sie sie gemäß der Dokumentation nach Ihren Wünschen.

// To view the default settings, hold "alt" while clicking on the "Settings" button.
// For documentation on these settings, see: https://aka.ms/terminal-documentation

{
    "$schema": "https://aka.ms/terminal-profiles-schema",

    "defaultProfile": "{61c54bbd-c2c6-5271-96e7-009a87ff44bf}",

    "profiles":
    [
        {
            // Make changes here to the powershell.exe profile
            "guid": "{61c54bbd-c2c6-5271-96e7-009a87ff44bf}",
            "name": "Windows PowerShell",
            "commandline": "powershell.exe",
            "hidden": false
        },
        {
            // Make changes here to the cmd.exe profile
            "guid": "{0caa0dad-35be-5f56-a8ff-afceeeaa6101}",
            "name": "cmd",
            "commandline": "cmd.exe",
            "hidden": false
        },
        {
            "guid": "{b453ae62-4e3d-5e58-b989-0a998ec441b8}",
            "hidden": false,
            "name": "Azure Cloud Shell",
            "source": "Windows.Terminal.Azure"
        }
    ],

    // Add custom color schemes to this array
    "schemes": [],

    // Add any keybinding overrides to this array.
    // To unbind a default keybinding, set the command to "unbound"
    "keybindings": []
}

Sehen: Gestalten Sie Ihr Windows-Terminal und verwenden Sie WSL und PowerShell wie ein Profi Dieser Blog kommuniziert speziell mit der Ubuntu-Konfiguration.

Siehe auch den anderen kostenlosen Editor von Microsoft -

Entwickeln in WSLMit der Erweiterung Visual Studio Code Remote – WSL können Sie das Windows-Subsystem für Linux (WSL) direkt von VS Code aus als Ihre Vollzeit-Entwicklungsumgebung verwenden. Sie können in einer Linux-basierten Umgebung entwickeln, Linux-spezifische Toolchains und Dienstprogramme verwenden und Ihre Linux-basierten Anwendungen ausführen und debuggen – alles bequem von Windows aus.

Antwort3

Eine mögliche Lösung besteht darin, PowerShell zu verwenden und die Linux-Befehle in Windows zu integrieren, als wären sie native Anwendungen.

Das Verfahren ist nicht einfach und ist im Microsoft-Blog dokumentiert
Integrieren Sie Linux-Befehle in Windows mit PowerShell und dem Windows-Subsystem für Linux.

Den vollständigen Quellcode, der im Artikel beschrieben wird, sowie weitere Hilfe zur Einbindung in Ihren Workflow finden Sie unter https://github.com/mikebattista/PowerShell-WSL-Interop.

Antwort4

Die Standard-WSL-Konsolen unterstützen alle Ctrl-Shift-c(Kopieren) und Ctrl-Shift-vEinfügen (standardmäßig nicht aktiviert, gehen Sie zu Eigenschaften und aktivieren Sie die Option, um dies zu aktivieren. Beachten Sie, dass dies auch in PowerShell- und CMD-Eingabeaufforderungen funktioniert). Sie können Text auch kopieren, indem Sie ihn auswählen und dann mit der rechten Maustaste klicken. Darüber hinaus können Sie den Ctrl-Shift-EnterVollbildmodus aktivieren und haben auch die gesamte Leistung basheiner Bash-Konsole, also zum Beispiel:

Tab    Autocomplete commands
Ctrl + r   Search the history of commands used
Ctrl + a / e  Move to start / end of current line
Alt + f / b   Move to the next / previous word
Ctrl + u / k  Cut all text on the left / right side of the cursor
Ctrl + w   Cut the word on the left side of the cursor
Ctrl + d   Logout of Terminal or ssh (or tmux) session,   Ctrl + l   Clear Terminal

Hinweis Ctrl u / k. Beachten Sie auch, Alt-Left/Rightdass Sie (mit den Cursortasten) zwischen Wörtern springen können.

Es kann auch interessant sein, etwas tmuxüber die großartigen Werkzeuge zur Fensterbearbeitung zu lernen:

C-b : (to enter command mode), then  :ls, :help, :set mouse on  (or other commands)
C-d  (Note: no C-b first!)  (Detach from a session, or C-b d or C-b D for interactive)
'M-' stands for 'Meta' key and is the Alt key on Linux
C-b ?  (list all key bindings)   C-z  (Suspend tmux)   C-q  (Unsuspend tmux)
tmux a (Attach last session)    tmux a -t mysession   (Attach to mysession)
tmux ls (list sessions),  tmux a (attach),   tmux a -t <name> (attach named session)
tmux  (start tmux),   tmux new -s <name>,   tmux new -s mysession -n mywindow
tmux kill-session –t <name>     (kill a session)   tmux kill-server  (kill tmux server)

***** Panes (press C-b first):
"  (Split new pane up/down)                  %  (Split new pane left/right)
z  (Toggle zoom of current pane)             x  (Kill current pane)
{ / }  (Swap current pane with previous pane / next pane)   t  (Show the time in pane)
q  (Display pane indexes)                    !  (Break current pane out of the window)
m  (Mark current pane, see :select-pane -m)  M  Clear marked pane
Up/Down/Left/Right    (Change pane in cursorkey direction, must let go of Ctrl)
C-Up/Down/Left/Right  (Resize the current pane in steps of 1 cell, must hold down Ctrl)
M-Left, M-Right  (Resize current pane in steps of 5 cells)
o  (Go to next pane in current window)       ;  (Move to the previously active pane)
C-o  (rotate panes in current window)       M-o  (Rotate panes backwards)
M-1 to M-5  (Arrange panes preset layouts: tiled, horizontal, vertical, main-hor, main-ver)

***** Windows (press C-b first):
c       (Create a new window)         ,  (Rename the current window)
0 to 9  (Select windows 0 to 9)       '  (Prompt for window index to select)
s / w   (Window preview)              .  (Prompt for an index to move the current window)
w       (Choose the current window interactively)     &  (Kill the current window)
n / p   (Change to next / previous window)      l  (Change to previously selected window)
i       (Quick window info in tray)

***** Sessions (press C-b first):
$  (Rename the current session)
( / )  (Switch 'attached' client to previous / next session)
L  Switch the attached client back to the last session.
f  Prompt to search for text in open windows.
r  Force redraw of the attached client.
s  (Select a new session for the attached client interactively)
~  Show previous messages from tmux, if any.
Page Up     Enter copy mode and scroll one page up.
Space       Arrange the current window in the next preset layout.
M-n         Move to the next window with a bell or activity marker.
M-p         Move to the previous window with a bell or activity marker.

***** Buffers (copy mode)
[  (Enter 'copy mode' to use PgUp/PgDn etc, press 'q' to leave copy mode)
]  (View history / Paste the most recent text buffer)
#  (List all paste buffers     =  (Choose a buffer to paste, from a list)
-  Delete the most recently copied buffer of text.
C-Up, C-Down
M-Up, M-Down
Key bindings may be changed with the bind-key and unbind-key commands.

Tatsächlich haben Sie in WSL weitaus mehr Möglichkeiten, die Konsole zu manipulieren, als in PowerShell.

verwandte Informationen