Menjalankan cmd.exe dari dalam Cygwin

16

Saya ingin menggunakan Cygwin untuk shell utama saya di tempat kerja, tetapi grup saya menggunakan file batch untuk beberapa proses. Saya telah diberitahu bahwa saya hanya dapat melakukan cmd /c batch.batuntuk menjalankan file batch dari Cygwin. Ini berfungsi untuk beberapa kasus, dan tidak untuk yang lain. Salah satu file batch benar-benar gagal ketika saya melakukan ini, tetapi berfungsi dengan baik ketika saya menjalankannya dari cmd shell.

Keanehan lain yang saya perhatikan adalah bahwa jika saya lari cmd /?dari Cygwin, saya tidak mendapatkan hasil. Menjalankan ini dari shell cmd memberikan bantuan standar. Bahkan melakukan cmd /c cmd /?tidak memberikan hasil. Jika saya menjalankan cmddari Cygwin, itu memberi saya cmd shell, dan kemudian jika saya lari cmd /?, saya mendapatkan teks bantuan, tetapi tanpa halaman istirahat.

Saya kira hal berikutnya yang harus dicoba adalah menemukan cara untuk benar-benar meluncurkan cmd dalam jendela yang berbeda, seolah-olah Anda telah pergi ke Start-> Run, dan kemudian ketik "cmd". Apakah ada cara untuk melakukan ini dari dalam Cygwin?

Ryan Fox
sumber

Jawaban:

8

/?diperlakukan sebagai pola oleh bash, di mana tanda tanya akan cocok dengan satu karakter, jadi jika Anda memiliki file satu-huruf atau direktori di root Cygwin Anda, pola tersebut akan diganti dengan itu. echo /?akan menunjukkan kepada Anda jika itu yang terjadi. Anda dapat melarikan diri tanda tanya dengan garis miring terbalik: /\?. Atau mengutip seluruh argumen: '/?'.

cygstart c:/windows/system32/cmd akan memulai cmd.exe di jendela sendiri.

ak2
sumber
pada win xp sp2 latop snipet kode berikut ini berfungsi: cygstart / cygdrive / c / WINDOWS / system32 / cmd
Michael Mao
14

Anda dapat menjalankan file batch dari shell Cygwin secara langsung, Anda bahkan tidak perlu panggilan perantara cmd. Jika file batch memerlukan argumen, mereka perlu dikutip dalam mode Windows; mungkin lebih mudah dijalankan cmd /c 'foo.bat "quoted arguments"'.

Anda tidak mengatakan di terminal apa Anda menjalankan shell. File batch sendiri tidak peduli tentang itu, tetapi perintah yang dijalankan dari file batch mungkin. Emulator terminal Cygwin tidak meniru konsol Windows, sehingga mereka baik untuk program Cygwin dan untuk program stdio saja tetapi tidak untuk program konsol Windows.

Jika biasanya menjalankan shell Cygwin di terminal Cygwin (seperti rxvt atau mintty), Anda dapat menjalankan file batch bermasalah di konsol Windows terpisah start foo.bat. Anda mungkin ingin menjalankan Console2 sebagai pengganti yang lebih baik untuk konsol Windows, dan menjalankan aplikasi konsol Windows di aplikasi Console2 dan Cygwin di terminal Cygwin (atau bahkan di Console2).

cmd /?adalah herring merah: mungkin ada direktori satu karakter panjang di direktori root Cygwin, sehingga shell mengembang /?dan berjalan cmddengan sakelar yang kebetulan tidak menghasilkan output.

Gilles 'SANGAT berhenti menjadi jahat'
sumber
Saya perlu menempelkan variabel shell ke argumen cmd, jadi saya pikir berikut ini dapat bekerja di sekitar Bash dan parser cmd: u = 'DOMAIN \ ACC' p = 'X <12' r = '{Baz 3.1 5-x - (TTT )} 'd = $' \ "'cmd / c foo.bat -u% d %% u %% d% -p% d %% p %% d% -fooBar% d %% r %% d% - fooBAR true
eel ghEEz