Terminal: Mendukung jalur linux untuk `startingDirectory` dari distro WSL

Dibuat pada 8 Mei 2019  ·  38Komentar  ·  Sumber: microsoft/terminal

  • Nomor build Windows Anda: Microsoft Windows [Version 10.0.18362.86]

  • Apa yang Anda lakukan dan apa yang terjadi:
    Mengatur direktori awal untuk wsl di profiles.json tidak membuatnya mengarah ke direktori yang benar.

  • Ambil konfigurasi di bawah ini: -
{
        "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"
}

Ini menghasilkan wsl yang dimulai di folder root
issue1

  1. Dalam konfigurasi ini: -
{
        "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"
}

Ini menghasilkan wsl yang dimulai di folder pengguna Windows
issue2

  • Apa yang salah / apa yang seharusnya terjadi:
    Pengaturan profil startingDirectory tidak diterapkan dengan benar pada profil wsl
Area-Settings Area-TerminalControl Help Wanted Issue-Feature Product-Terminal

Komentar yang paling membantu

sepertinya itu mengharapkan jalur Windows tetapi melewati jalur fs WSL di bawah AppData secara langsung tidak berfungsi. Menggunakan jalur UNC baru berfungsi untuk saya:
"startingDirectory":"//wsl$/Ubuntu/home/cem/src" -> ~/src

Begitu juga lokasi Windows biasa:
"startingDirectory":"C:/wd" -> /mnt/c/wd

Semua 38 komentar

sepertinya itu mengharapkan jalur Windows tetapi melewati jalur fs WSL di bawah AppData secara langsung tidak berfungsi. Menggunakan jalur UNC baru berfungsi untuk saya:
"startingDirectory":"//wsl$/Ubuntu/home/cem/src" -> ~/src

Begitu juga lokasi Windows biasa:
"startingDirectory":"C:/wd" -> /mnt/c/wd

Hmm. Kami mungkin harus menambahkan pengaturan untuk menyarankan bahwa startingDirectory adalah jalur wsl. Saat ini kami hanya mengatur secara manual direktori kerja aplikasi klien yang kami mulai, jadi kami harus secara khusus mengetahui bahwa profil tersebut mencoba menjadi wsl, dan menyesuaikan logika kami untuk meneruskan direktori kerja.

satu peretasan mudah akan berada di dalam ~/.bashrc file wsl, tambahkan baris
cd ~

Masalah terpecahkan.

satu peretasan mudah akan berada di dalam ~/.bashrc file wsl, tambahkan baris
cd ~

Masalah terpecahkan.

Ini juga merupakan cara yang bagus untuk mendapatkan perilaku aneh dan tidak terduga di semua hal lain yang menggunakan bash di komputer Anda. :tersenyum:

Metode ini sedikit berhasil. Kita bisa mengurai nama distribusi dari perintah di profil sehingga wsl.exe -d Ubuntu memberi kita "Ubuntu", dan kemudian meneruskannya ke Profile::EvaluateStartingDirectory . Kemudian, jika gagal, sebelum menyetelnya ke %userprofile% kita dapat mengevaluasi \\WSL$\[distributionName][directory] dan melihat apakah itu jalur direktori yang valid.

Atau kita bisa membuat metode tersebut menjadi metode non-statis dan menarik nilai dari _commandline .

EDIT: Saya menyadari sekarang bahwa ini tidak akan berhasil. Server P9 kemungkinan besar tidak akan dimulai, dan jika sudah dimulai, tidak akan semua distro dimuat sebagai share yang tersedia di bawah jalur UNC.

@ sandeepkv93 - Peretasan itu bukan yang terbaik. Ketika bekerja di katakan VS Code dan Anda ingin terminal WSL Anda terbuka di dalam direktori proyek Anda, ini akan mencegahnya. Pasti akan menimbulkan masalah lain juga

Solusi saya

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

Saya baru saja mengedit /etc/passwd setelah membuat pengguna baru menjadi direktori utama pengguna Windows saya /c/Users/MikeLloyd dan menyetel startingDirectory menjadi ~ di profile.json saya. Ini bekerja untuk saya seperti yang diharapkan pada 18965.1005.

Solusi saya

"commandline" : "wsl.exe ~"

Bagaimana jika saya ingin mengatur direktori default ke direktori di C :?
Saya mencoba "commandline" : "wsl.exe /mnt/c/Programming -d Ubuntu-18.04" dan direktori lainnya, dengan atau tanpa /mnt/c/ , dengan atau tanpa tanda kutip tunggal dan tidak berhasil.

@LeoLozes Posting kedua di utas ini menunjukkan bagaimana melakukan persis apa yang Anda inginkan.

dalam kasus saya, cara kerjanya seperti ini
"startingDirectory": "//wsl$/Ubuntu-18.04/home/username"

Baik solusi wsl.exe ~ -d <distro> dan //wsl$/home/<username> bekerja untuk saya, tetapi alangkah baiknya jika startingDirectory diinterpretasikan oleh WSL daripada Windows. Misalnya "startingDirectory": "$HOME/projects" seharusnya berfungsi.

Akan lebih baik jika Terminal Windows dapat mengubah jalurnya. Saya mengikuti # 1060 berharap untuk memulai wsl saya dengan cepat, tetapi tidak berhasil, karena Windows Explorer selalu meneruskan jalur asli ke Terminal.

Saya memperbaiki masalah ini dengan

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

di Microsoft Windows [Version 10.0.18363.592] , ver 0.8.100910.0

Cara saya untuk selalu memulai WSL di $ HOME:
Buat tautan wt.exe,
C: \ Users \ YOURNAME \ AppData \ Local \ Microsoft \ WindowsApps \ wt.exe wsl.exe ~ -d Ubuntu
dan cukup sematkan di menu start saya, dan pertahankan "startingDirectory" di profil sebagai null

Jika Anda tidak meneruskan "direktori awal" ke "wsl.exe", ini akan selalu dimulai dari direktori Anda saat ini.

Solusi saya adalah membuat profil baru dengan memulai baris perintah wsl.exe ~ . Versi terbaru di toko MS.

{
            "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
},

Perbaikan mudah
"startingDirectory": "// wsl $ / Ubuntu / home /",

@ troy-mac yang benar-benar akan dimulai di direktori "home", bukan _your_ home directory. Silakan lihat jawaban di atas untuk solusi kerja yang tak terhitung jumlahnya ( contoh )

Saya menggunakan Ubuntu dan solusi saya adalah:
"commandline" : "ubuntu.exe"

Perbaikan mudah
"startingDirectory": "// wsl $ / Ubuntu / home /",

Saya bahkan tidak tahu mengapa mereka memberi 👎🏻

Terima kasih saya sudah menemukannya ... hal berikutnya yang perlu diselesaikan adalah file /etc/resolv.conf ditimpa. Mencoba beberapa pekerjaan di luar pekerjaan

Bagaimana cara memulai WSL di direktori tertentu?

Misalnya, Jika saya ingin mulai dari ~/dev apa yang harus saya tulis di properti commandline ?

Saya mencoba "commandline": "wsl.exe ~/dev" , tetapi mendapat kesalahan seperti di bawah ini:

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

[process exited with code 126]

Edit:
nvm. Cari tahu dengan menulis

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

Dengan rilis terbaru beberapa hari yang lalu (profile.json diubah namanya menjadi settings.json), startingDirectory sekarang tidak berfungsi sama sekali. Tidak ada satu variasi pun dalam utas ini yang berfungsi sama sekali untuk saya, apakah ada orang lain yang melihat hal yang sama?

Menyetel startingDirectory berhasil untuk saya, tetapi tampaknya Anda harus menempatkannya di profil yang Anda gunakan. Jadi misalnya, Ubuntu:

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

Saya memiliki 4 distro wsl yang diinstal, Ubuntu, Debian, Kali-Linux dan CentOS. Ketika saya menggunakan pengaturan "startingDirectory": "\\\\wsl$\\<distroname>\\home\\jakob" Untuk sebagian besar Debian menghormati direktori awal tetapi tidak selalu, yang lain tidak. Namun, ketika saya membuka tab kedua dengan salah satu dari 3 distos lainnya, mereka selalu terbuka ~ Tampaknya menggunakan "startingDirectory": "//wsl$//<distroname>/home/jakob" tidak ada bedanya tetapi menggunakan \\ lebih dapat diandalkan

Sunting: Saya menjalankan pratinjau Insider build 19619 dan wsl2. Tampaknya saat VM aktif dan berjalan, mereka menghormati pengaturan startingDirectory. Jika VM dihentikan dan harus dimulai saat membuka tab, mereka tidak melakukannya.

Perbaikan mudah
"startingDirectory": "// wsl $ / Ubuntu / home /",

Saya bahkan tidak tahu mengapa mereka memberi 👎🏻

Seharusnya / home / username bukan / home

Hanya untuk mengulangi sesuatu yang sudah dikatakan , ini adalah cara Anda mengatur direktori awal Anda untuk instance WSL tertentu:

    "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"
        }
    ],

Ganti "Ubuntu" dengan nama distro Anda.

Saya memiliki 4 distro wsl yang diinstal, Ubuntu, Debian, Kali-Linux dan CentOS. Ketika saya menggunakan pengaturan "startingDirectory": "\\\\wsl$\\<distroname>\\home\\jakob" Untuk sebagian besar Debian menghormati direktori awal tetapi tidak selalu, yang lain tidak. Namun, ketika saya membuka tab kedua dengan salah satu dari 3 distos lainnya, mereka selalu terbuka ~ Tampaknya menggunakan "startingDirectory": "//wsl$//<distroname>/home/jakob" tidak ada bedanya tetapi menggunakan \\ lebih dapat diandalkan

Sunting: Saya menjalankan pratinjau Insider build 19619 dan wsl2. Tampaknya saat VM aktif dan berjalan, mereka menghormati pengaturan startingDirectory. Jika VM dihentikan dan harus dimulai saat membuka tab, mereka tidak melakukannya.

Ini karena // wsl $ / folder tidak diinisialisasi hingga instance wsl dimulai. Jadi contoh pertama tidak akan mulai dalam ~, tetapi yang lain akan mulai dalam ~ karena contoh pertama menginisialisasi folder // wsl $ /

@ troy-mac yang benar-benar akan dimulai di direktori "home", bukan _your_ home directory. Silakan lihat jawaban di atas untuk solusi kerja yang tak terhitung jumlahnya ( contoh )

@antoineco Saya menggunakan Ubuntu (tidak yakin apakah itu penting) tetapi Itu menempatkan saya di direktori home _my_ / home / troymac jadi bagi saya saya mendapatkan hasil yang saya cari ...

@ troy-mac Saya baru saja mencoba di Ubuntu, dan ternyata tidak. Anda mungkin memiliki arahan lain, baik di file pengaturan Anda, atau file bashrc Anda, tapi ini saja _not_ menempatkan Anda di direktori home Anda.

Bagaimanapun, poin utama saya adalah kita harus menjaga utas ini bebas dari informasi yang salah. Solusi yang berfungsi telah diusulkan , mari dorong pengguna untuk menggunakannya daripada membagikan trik alternatif yang tidak akurat.

Bagi saya (mungkin karena zsh), solusi "commandline": "wsl.exe /mnt/d/workspace -d Debian" tidak berhasil:

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

[process exited with code 126]

tetapi "startingDirectory": "D:/workspace" tanpa "commandline" berfungsi dengan baik, seperti yang disarankan di awal.

Tidak ada dunia di mana menentukan direktori dengan melakukan wsl /directory akan berhasil. Itu akan _always_ (tidak hanya ketika menggunakan zsh!) Mengakibatkan shell mencoba untuk _mengeksekusi direktori_ dan kemudian keluar. Bukan itu yang Anda inginkan.

ada pembaruan tentang ini?

@tokopedia Tidak. Kami akan memastikan untuk memperbarui utas ini jika ada. Sementara itu, bolehkah saya merekomendasikan tombol Berlangganan?
image
Dengan begitu, Anda akan diberi tahu tentang pembaruan apa pun pada utas ini, tanpa perlu melakukan ping ke semua orang di utas ini ☺️

Hai semua, saya tahu saya mendapat beberapa jempol ke bawah untuk saran yang saya posting sebelumnya, tetapi saya baru saja menginstal WSL dan Ubuntu-20.04 pada sistem baru dan yang saya lakukan hanyalah menambahkan baris di bawah ini ke file settings.json saya dan itu 100% bekerja untuk memasukkan saya ke direktori home saya. Saya tidak mengatakan ini akan bekerja untuk semua orang karena saya tidak yakin pengguna yang tidak setuju benar-benar menguji ini atau tidak, tetapi ini telah berhasil untuk saya pada 2 sistem yang berbeda baik dengan Ubuntu-20.04 dan 18.04. Saya pikir ini adalah hal termudah untuk dicoba terlebih dahulu dan jika tidak berhasil untuk Anda, maka coba beberapa saran lain di utas ini.

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

atau gunakan saran @antoineco yang mungkin bekerja sepanjang waktu ...
"baris perintah": "wsl.exe ~ -d Ubuntu"

@ troy-mac Saya berbicara sendiri di sini, tetapi yang tidak disukai adalah cara untuk mengatakan _ "Peringatan, pembaca. Solusi yang disarankan dalam pesan ini tidak berfungsi untuk semua orang, harap lihat solusi yang diterima sebagai gantinya" _. Itu bukan upaya untuk memberhentikan Anda.

Seperti yang Anda katakan, "commandline": "wsl.exe ~ -d <distro_name>" (https://github.com/microsoft/terminal/issues/592#issuecomment-504947429) berfungsi di hampir semua kasus, jadi mari pastikan solusi ini terlihat oleh orang-orang yang menggunakan mengatasi masalah ini, alih-alih mencoba menemukan solusi baru yang mendekati.

Saat menginstal Ubuntu, bisa menggunakan

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

Jika tidak yakin apa [DISTRONAME] itu, lakukan:

  1. Menangkan + R
  2. \\ wsl $
  3. Tekan enter

Sekarang Anda akan mendapatkan fileshare di explorer. Fx

image

Cukup ikuti jalur ke tempat Anda ingin memulai saat membuka tab baru di Terminal Windows. Ingat:

  1. empat garis miring ke belakang di awal dan
  2. dua garis miring di antara nama folder

Suka:
image

saat membuat startingDirectory . Mulai ulang Terminal Windows, dan Anda siap melakukannya.

Apakah halaman ini membantu?
0 / 5 - 0 peringkat

Masalah terkait

wkbrd picture wkbrd  ·  3Komentar

dev-logan picture dev-logan  ·  3Komentar

warpdesign picture warpdesign  ·  3Komentar

waf picture waf  ·  3Komentar

TayYuanGeng picture TayYuanGeng  ·  3Komentar