#linux #bash #powershell #windows-subsystem-for-linux
#linux #bash #powershell #windows-subsystem-for-linux
Вопрос:
wsl -h
показывает следующее:
--exec, -e <CommandLine> Execute the specified command without using the default Linux shell.
-- Pass the remaining command line as is.
Что означает «без использования оболочки Linux по умолчанию» (т. Е. Что еще он будет использовать, если не оболочку по умолчанию !?)?.
Кроме того, в качестве примера, теперь у меня есть три возможных способа запуска Linux ls
из моей командной строки PowerShell (т. Е. Это не будет Get-ChildItem
псевдоним ls
, а вместо этого команда Linux через WSL):
PS C:> wsl -e ls # Alternatively, wsl --exec ls
PS C:> wsl -- ls
PS C:> wsl ls
Но все выходные данные кажутся одинаковыми. Как бы вы объяснили различия между этими тремя способами запуска команды WSL Linux из командной строки PowerShell?
Комментарии:
1. с помощью wsl… используется /bin/bash. С помощью wsl -e…. Оболочка env. Это имеет большее значение, когда вы запускаете сценарии оболочки на wsl.
Ответ №1:
Я думаю, это означает, что wsl запускает команду directly
, вместо того, чтобы запускать процесс оболочки для выполнения команды.
Например, если я запускаю :
wsl -e sleep 10
С другого терминала у меня есть :
root 1482 1 0 11:32 tty3 00:00:00 /init
ubuntu 1483 1482 0 11:32 tty3 00:00:00 sleep 10
Мы видим /init
, что это родительский элемент sleep 10
, без промежуточной оболочки.
Ответ №2:
Классный трюк заключается в использовании этого для установки переменной X11 $DISPLAY, позволяющей использовать Windows terminal для получения удаленных оболочек с помощью WSLG.
# in microsoft terminal or powershell use this command line
wsl.exe -- ssh -a -X -Y $hostname
затем в удаленной системе
# DISPLAY will show something like localhost:10.0 on the remote system
echo $DISPLAY
# use a program like xeyes to test
xeyes
Комментарии:
1. Звучит неплохо, но я попробовал и не могу заставить его работать. Когда вы говорите
$hostname
, я предположил, что вы имели в виду замену этого на IP или имя хоста удаленной системы Linux, я пробовал оба способа, и все, что происходит, это то, что я подключаюсь к удаленной системе по ssh. Затемecho $DISPLAY
ничего не отображается… Вводxeyes
результатовError: Can't open display:
. Вы работаете в Windows 11? Я использую Windows 10, но я настроил свой WSL для поддержки приложений с графическим интерфейсом, поэтому я подумал, что это должно сработать.2. @YorSubs да, у вас должен быть Win11 или, по крайней мере, недавно исправленная Windows 10. WSLG находится в Windows 11. У вас должен быть WSL2 WSLG специально. github.com/microsoft/wslg/issues/730