Pertanyaan ConEmu: Bagaimana cara memanggil msys2 sebagai tab?


Saya ingin membuat kisi-kisi 2x2 konsol, dan saya ingin itu menjadi pengaturan default saya, yang berarti ketika saya membuka ConEmu, pengaturan ini menjadi pengaturan startup. Saya telah menulis tugas seperti di bawah ini:

> * cmd -cur_console: n

* PowerShell -cur_console: s1TVn

cmd / A / Q / K "C: \ dev \ msys64 \ msys2_shell.bat" -cur_console: s1THn

ghci.exe -cur_console: s2THn

Masalahnya adalah dengan perintah terakhir. Saya ingin memulai msys2, tetapi ketika saya menjalankan tugas saya, untuk baris ketiga, saya mendapatkan konsol, tetapi tidak berjalan di dalam ConEmu, ia membukanya sebagai jendela terpisah. Bagaimana saya bisa memperbaiki konfigurasi ini?

Juga, bagaimana saya bisa mengatur konfigurasi ini sebagai default ketika saya memulai ConEmu, sementara sekarang ketika saya memulainya, saya hanya mendapatkan konsol cmd tunggal.


6
2018-01-10 13:47


asal




Jawaban:


Lihat ke dalam msys2_shell.bat untuk mendapatkan jawabannya. Batch ini menjalankan mintty bukan bash shell. Tak berguna. Ubah baris ketiga menjadi jalur lengkap bash.exe -l -i.

bagaimana saya bisa mengatur konfigurasi ini sebagai default ketika saya memulai ConEmu

Ada halaman pengaturan "Startup" di ConEmu, bukan?


3
2018-01-10 14:01



semacam jawaban yang tidak berguna, bukan? - Evgeny Bobkin


Saya juga memiliki masalah mendapatkan MSYS2, MinGW32 dan MinGW64 shell (v2016-12-07) untuk bekerja di ConEmu v161206.

Satu-satunya solusi kerja (setengah portabel) yang saya temukan adalah sebagai berikut.

  1. Buat tugas baru dengan nama {Shells::mingw-64} dan perintah berikut di ConEmu untuk shell MinGW64:

    set MSYSTEM=MINGW64 & set MSYSCON=conemu64.exe & "%ConEmuDir%\..\..\..\msys64\usr\bin\bash.exe" --login -i -new_console:C:"%ConEmuDir%\..\..\..\msys64\mingw64.exe"
    
  2. Buat tugas baru dengan nama {Shells::mingw-32} dan perintah berikut di ConEmu untuk shell MinGW32:

    set MSYSTEM=MINGW32 & set MSYSCON=conemu64.exe & "%ConEmuDir%\..\..\..\msys64\usr\bin\bash.exe" --login -i -new_console:C:"%ConEmuDir%\..\..\..\msys64\mingw32.exe"
    
  3. Buat tugas baru dengan nama {Shells::msys2-64} dan perintah berikut di ConEmu untuk shell MSYS2:

    set MSYSTEM=MSYS & set MSYSCON=conemu64.exe & "%ConEmuDir%\..\..\..\msys64\usr\bin\bash.exe" --login -i -new_console:C:"%ConEmuDir%\..\..\..\msys64\msys2.exe"
    

Perhatian: Ubah jalur relatif di atas agar cocok dengan jalur ke MSYS2 pada sistem Anda.

Solusinya adalah setengah portabel, karena secara eksplisit menyatakan ConEmu dieksekusi (mengubahnya menjadi ConEmu.exe untuk x86).

Saya tidak yakin apakah nilai dari MSYSCON variabel lingkungan penting. Saya hanya mengaturnya untuk keamanan, karena file batch MSYS2 msys2_shell.cmd juga mengaturnya.

Alternatifnya adalah menggunakan msys2_shell.cmd skrip batch. Pendekatan ini memiliki kerugian besar bahwa msys2_shell.cmd menumbuhkan proses baru melalui Windows START perintah, karena itu dua tab ditambahkan di ConEmu.

  1. Buat tugas baru dengan nama {Shells::mingw-64} dan perintah berikut di ConEmu untuk shell MinGW64:

    "%ConEmuDir%\..\..\..\msys64\msys2_shell.cmd" -mingw64 -conemu -new_console:C:"%ConEmuDir%\..\..\..\msys64\mingw64.exe"
    
  2. Buat tugas baru dengan nama {Shells::mingw-32} dan perintah berikut di ConEmu untuk shell MinGW32:

    "%ConEmuDir%\..\..\..\msys64\msys2_shell.cmd" -mingw32 -conemu -new_console:C:"%ConEmuDir%\..\..\..\msys64\mingw32.exe"
    
  3. Buat tugas baru dengan nama {Shells::msys2-64} dan perintah berikut di ConEmu untuk shell MSYS2:

    "%ConEmuDir%\..\..\..\msys64\msys2_shell.cmd" -msys -conemu -new_console:C:"%ConEmuDir%\..\..\..\msys64\msys2.exe"
    

Itu msys2_shell.cmd dimaksudkan untuk digunakan secara langsung dari CMD.EXE, dengan ConEmu64.exe / ConEmu.exe dalam PATH:

msys2_shell -mingw64 -conemu

Perintah itu membuka tab MinGW64 baru di ConEmu.

tl; dr: Saya merekomendasikan pendekatan pertama. Berikut adalah screenshot sebagai bukti di ConEmu:

Working MSYS2 MinGW64 shell in ConEmu


11
2017-12-19 12:45



Jawaban ini OK tetapi jauh lebih rumit daripada yang diperlukan. Itu -new_console:C:"%ConEmuDir%\..\..\..\msys64\mingw64.exe" bagian tidak diperlukan, di antara hal-hal lainnya. - jstine


Apa yang harus dilakukan sebenarnya cukup sederhana, setelah Anda mengupas semua lapisan. Ini berfungsi dengan baik sebagai permintaan (pastikan untuk memodifikasinya ke lokasi pemasangan MSYS2 spesifik Anda):

set CHERE_INVOKING=1 & set MSYSTEM=MINGW64 & "c:\msys64\usr\bin\bash.exe" --login -i

Saya pribadi akan merekomendasikan pengaturan shell untuk mewarisi PATH Anda:

set CHERE_INVOKING=1 & set MSYSTEM=MINGW64 & set MSYS2_PATH_TYPE=inherit & "c:\msys64\usr\bin\bash.exe" --login -i

Halaman pengaturan Tugasku berakhir tampak seperti ini: ConEmu Startup::Tasks Page

Memecahnya Semua

MSYS2 suka mengkonfigurasi shell sesuai dengan variabel lingkungan daripada parameter baris perintah. Melewatkan pilihan ke dalam program seperti itu mungkin tampak tidak alami pada awalnya, tetapi pada dasarnya itu hanya mengikuti seri sederhana ini: set VAR=value & set VAR2=value & "c:\path\to\command" [args]

  • CHERE_INVOKING - jika diatur ke 1, bash dimulai di direktori kerja saat ini, jika tidak dimulai di direktori home pengguna. Ini perlu disetel ke 1untuk memungkinkan shell berfungsi sebagaimana yang diharapkan dari menu konteks Jendela Explorer.

  • MSYSTEM - yang menggunakan subsistem MSYS2. Ada tiga: MSYS, MINGW32, dan MINGW64. Itu MSYS subsistem hanya boleh digunakan untuk pacman komando operasi dan jadi saya biasanya hanya memanggil bahwa melalui ikon menu awal-skool pada kesempatan yang sangat langka yang dibutuhkan. MINGW32 tidak berguna untuk semua oleh beberapa pengguna terpilih dan Anda tahu siapa Anda, mungkin.

  • MSYS2_PATH_TYPE - jika MSYS unset menggunakan minimal PATH lingkungan yang hanya berisi biner MSYS dan pasangan memilih jalur sistem Windows, dan merupakan mode yang diperlukan untuk MSYSTEM=MSYS kulit hanya. Untuk MINGW kerang itu dianjurkan untuk digunakan inherit - Saya telah menggunakan MSYS2_PATH_TYPE=inherit tanpa masalah selama bertahun-tahun.

Ada variabel lain MSYSCON disebutkan oleh jawaban lain dan direferensikan msys2_shell.cmd -- abaikan itu. Ini hanya untuk digunakan dalam msys2_shell.cmd file batch dan tidak memegang peran pada perilaku inisialisasi bash.exe atau MSYS shell.

Lokasi Instalasi MSYS2

Jalur MSYS2 telah sengaja dikodekan sebagai c:\msys64\ karena itulah lokasi pemasangan default untuk penginstal Windows MSYS2. Tidak masuk akal dalam hal ini untuk digunakan %ConEmuDir% karena itu relatif %PROGRAMFILES%, dan MSYS2 biasanya dipasang relatif terhadap direktori root dari hard drive. Perhatikan itu tidak masuk akal untuk digunakan %ConEmuDir% saat mereferensikan shell MSYS2 yang disertakan Git untuk Windows, sejak itu aku s relatif terpasang ke %PROGRAMFILES%.

Tidak ada cara mudah untuk mengetahui lokasi pemasangan MSYS2. Tidak ada variabel lingkungan yang diatur oleh MSYS2, sebanyak yang saya harapkan. Bukankah akan membengkak jika MSYS2 memiliki opsi untuk mengekspor sesuatu liek MSYSTEM_HOME ke lingkungan komputer Anda? Tapi tidak, jadi itu sepenuhnya pada Anda sebagai pengguna untuk mengetahui di mana itu dipasang dan arahkan ConEmu ke sana.

Mengenai msys2_shell.cmd :

Jangan gunakan itu. File batch salah bernama. Itu harus disebut msys2_terminal.cmd atau serupa karena apa yang sebenarnya dilakukan adalah a mengatur seluruh terminal untuk shell. Ini adalah kesalahan terminologi umum, terutama pada sistem operasi Windows di mana tidak pernah ada pemisahan yang jelas terminal dari kulit. Begini cara kerjanya, dijelaskan dari perspektif pengguna Windows:

  • Kulit - Ini adalah prosesor perintah dan peluncur batch / skrip. Ini pada dasarnya adalah aplikasi baris perintah seperti aplikasi baris perintah lainnya. Sebuah shell bahkan tidak memerlukan koneksi jendela atau keyboard yang terlihat. Ini dapat beroperasi sepenuhnya di latar belakang pada file, stream, atau sumber lain dari input / output data.

  • Terminal - ini adalah sebuah aplikasi berjendela yang menyediakan antarmuka keyboard / mouse ke program shell. Di jendela sering disebut sebagai Jendela Konsol. Perintah-perintah keyboard disalurkan ke program shell, dan output ditampilkan di dalam jendela dengan scrollbars, teks berwarna, dan fitur-fitur menyenangkan lainnya.

Dalam skenario ini, saya ingin terminal saya menjadi ConEmu dan cangkangku menjadi BASH (mingw64). Karena itu saya mau ConEmu untuk memulai shell dan hanya kerang. Aku tidak mau ConEmu untuk memulai mintty. Keduanya adalah terminal dan itu akan menyebabkan kita mendapatkan jendela pop-up sekunder - satu untuk ConEmu dan satu lagi untuk mintty. Tapi itulah yang coba dijalankan msys2_shell.cmd akan melakukan. Jadi jangan gunakan itu.


5
2018-02-21 17:08