Bagaimana cara mengeksekusi file .sh di Windows?

67

Ketika saya mencoba mengeksekusi file (name.sh) di baris perintah dengan perintah ./name.sh, saya mendapatkan kesalahan bahwa:

"." tidak dikenali sebagai perintah internal atau eksternal, file yang dapat dioperasikan atau batch

tolong bantu saya menjalankan file .sh

Broam
sumber

Jawaban:

74

Anda menggunakan Windows CMD.EXE (dari pesan kesalahan). Ini menggunakan sintaks yang berbeda untuk menjalankan perintah. Anda harus menggunakan sh name.sh, dengan asumsi bahwa Anda telah menginstal Cygwin atau yang serupa.

Untuk memperjelas, Windows tidak memiliki utilitas bawaan untuk mendukung file .sh. Untuk menjalankannya, Anda harus menginstal alat pihak ketiga seperti Cygwin .

Roger Lipscombe
sumber
7
Bisakah Anda juga tidak hanya menginstal Git di Windows? Tampaknya melakukan hal itu menambah dukungan untuk skrip shell walaupun skrip shell tersebut tidak melakukan tugas yang berhubungan dengan Git.
DaveTheMinion
2
@ David B Ya, itu berfungsi jika Anda meletakkan C: \ Program Files (x86) \ Git \ bin (atau apa pun itu di komputer Anda) di PATH Anda, karena Git menempatkan segala macam alat yang berguna di sana termasuk sh.exe
Sumyrda
1
@ DavidB Ya, Git Bash tahu apa yang harus dilakukan dengan itu, benar!
Legenda
13

Anda mencoba menjalankan perintah Linux di Prompt Perintah Windows.

Di Linux, garis miring adalah pemisah jalur. Pada Windows backslash adalah pemisah jalur dan garis miring biasanya menunjukkan argumen.

Karenanya, Windows berpikir Anda mencoba menjalankan perintah yang disebut "." dan menguraikannya argumen "/name.sh". Konvensi yang benar adalah ". \ Name.sh". Selain itu Windows akan secara otomatis mencari direktori Anda saat ini untuk perintah Anda sehingga Anda cukup mengetik "name.sh".

Masalah berikutnya yang akan Anda hadapi adalah bahwa Windows tidak tahu apa itu sh script, sekali lagi ini adalah masalah Linux. Anda dapat menyelesaikan ini dengan menginstal Cygwin jika Anda benar-benar ingin atau perlu menjalankan skrip sh.

Namun, menilai dari salah satu komentar Anda sebelumnya, Anda bisa mengganti nama script menjadi name.bat dan menghapus baris "#! / Bin / sh". Sekarang Anda memiliki file Batch yang harus dipahami Windows. Anda dapat membaca lebih lanjut tentang file batch di sini .

Martin Fido
sumber
12

Atau Anda bisa beralih ke sisi gelap dan menginstal Linux. Dari prompt:

sh runide.sh

atau

sudo sh runide.sh

Program Anda akan berjalan dan Anda akan memiliki sistem yang lebih baik juga.

steve
sumber
15
Itu seperti mengatakan, "Cukup kaya dan bayar seseorang untuk melakukannya untukmu"
Funkodebat
7

Solusi terbaik menurut saya:

  • Unduh dan instal .git untuk Windows

  • Klik kanan desktop dan katakan "git bash di sini"

  • Jalankan skrip Anda seperti di unix

  • Selesai!

Perhatian: Banyak perintah tidak akan berfungsi di windows! Tapi tetap saja, banyak hal dasar akan berhasil.

Jika Anda membutuhkan skrip itu secara teratur, Anda mungkin ingin membuat pintasan (misalnya pada desktop Anda):

  • Buat Pintasan untuk mintty.exedi desktop Anda

  • Edit properti pintasan dan ubah target (tetap jalan):

  • C:\Program Files\Git\usr\bin\mintty.exe" -h always /bin/bash -l -e 'D:\folder\script.sh'

Heanz
sumber
Ini tidak berfungsi. Ketika saya menjalankan @FOR / f "token = *"% i IN ('buruh pelabuhan-mesin env --shell cmd default') DO @% i. Saya mendapatkan token yang tidak terduga (
Steve Tomlin
5

Anda mencoba menjalankan mobil Anda dengan jus jeruk dan bukannya bensin. Windows berbagi perintah serupa yang disimpan dalam file .bat atau .cmd dengan skrip shell Unix / Linux / zOS Unix / * ix karena dua keluarga sistem operasi ini memiliki nenek moyang yang sama dengan mesin DEC PDP-x DEC.

Jika Anda ingin kepuasan instan, Anda harus menginstal lingkungan yang menyediakan program "sh.exe" atau "csh.exe" atau program "bash.exe" (tsh.exe siapa?)

Atau, jika Anda tahu perintah skrip Unix, sangat baik, dan Anda tahu perintah file Windows .cmd dan .bat, sangat baik, Anda dapat menerjemahkan file .sh menjadi file .bat atau .cmd. Meski begitu, Anda akan sering menemukan lebih banyak program bergaya Unix yang tidak memiliki padanan di Windows - grep, sed, vi, emacs, dll. Dengan demikian, panggilan untuk menginstal CygWin (tidak ada minimalis) - hanya untuk mendapatkan shell dan Unix alat. Letakkan di flash-drive, untuk acara-acara khusus ini.

JM
sumber
3

Seseorang mengatakan sesuatu tentang MS-DOS menggunakan /untuk perintah dan \untuk jalur. Ini sedikit menyesatkan. Lihatlah contoh saya:

C:\myfoo\foo\>cd../.. 
C:\myfoo\foo\>cd..\..

Tidak ada perbedaan efek. Ya, itu tidak benar untuk semua operasi - jawaban yang sebenarnya adalah Tidak , atau tanpa Cygwin atau SSHD Anda tidak bisa.

Saya hanya tahu karena saya bodoh menghabiskan setengah hari mencoba mencari tahu apa if then fidan eval, execlakukan dengan -Djava.somethingketika dipanggil.

grizzleybear123
sumber
2

Gunakan Github untuk Windows. Ini berisi semua executable lingkungan Unix.

https://github-windows.s3.amazonaws.com/GitHubSetup.exe

Nederealm
sumber
1
Lebih khusus, instal Git. Satu-satunya alasan menginstal Github untuk Windows berisi Bash shell adalah karena dilengkapi dengan Git. :)
ZaLiTHkA
Alternatif yang bagus, terima kasih, jadi tidak perlu menginstal lebih banyak alat. +1
Guilherme Nascimento
1

Saya menemukan solusi yang berbeda dan mudah, yang disebut UnixUtil .

Unduh dan unzip ke drive C :. Tetapkan variabel lingkungan pathuntuk disertakan C:\UnixUtils\usr\local\wbin.

Ini penting. JANGAN setel path keC:\UnixUtils\bin

prabhanjan deshpande
sumber
1

Ini adalah utas lama tetapi bagi mereka yang menggunakan Windows 10. Buka saja fitur windows dari panel kontrol 'Nyalakan atau Matikan Fitur Windows'

Pilih fitur 'Subsistem Windows untuk Linux'. Setelah menginstal, Anda memiliki 'Bash' dan Anda bahkan dapat mengkonfigurasi server Linux asli dalam bash. Dan tentu saja, perintah sh, dalam bash, berfungsi juga.

Egbert
sumber
0

Mungkin saja masalahnya ada di dalam file name.sh- Anda mencoba menggunakan .perintah tetapi mencoba menjalankan sejenis shell (mis. csh, Saya pikir) di mana itu bukan perintah yang valid.

Jadi: apakah name.shmulai dengan yang benar #!/bin/sh(jika Anda benar-benar mencoba menjalankan sh)?

Andrew Jaffe
sumber
1
ya itu mulai #! / bin / sh cd D: \ Raghu D: winzip32.exe -min -a -r D: \ p itulah isi file
0

ok, ada BANYAK yang salah dengan itu - jatuhkan #! / bin / sh, dan ubah extention menjadi bat, dan itu mungkin bekerja dengan beberapa perbaikan lagi. Kemudian Anda bisa memanggilnya dengan nama file juga.

Sintaksis skrip shell unix, dan file batch windows tidak terlalu mirip. cygwin, atau banyak bermain-main dengan unxutils mungkin membuat sesuatu yang akan bekerja di keduanya, tetapi kecuali jika Anda benar-benar yakin lingkungan selalu sama, itu tidak sebanding dengan sakit kepala

Journeyman Geek
sumber
drop the #!/bin/sh, and change the extention to bat, and it might work with a few more fixes.Apa?! Saya menduga Anda belum pernah mencoba ini ... Di Windows, bahkan kemampuan bash yang paling sederhana tidak didukung atau memerlukan sintaks yang panjang.
Camilo Martin
Paragraf kedua mencakup fakta bahwa kemungkinannya tidak akan berhasil, tanpa kerja yang adil.
Journeyman Geek
Ya kamu benar.
Camilo Martin
0

Jika Anda memiliki kotak Linux di rumah Anda (atau kantor) dan terhubung ke jaringan yang sama, dan jaringan ini aman, ini mungkin melakukan trik:

  1. Buat berbagi folder pada Windows (cukup mudah, tetapi pastikan jaringan aman dari penyusup).
  2. Pasang di Linux dengan mount //WinMachine/Share LinuxFolder(IIRC, dan membutuhkan Samba ).
  3. Menggunakan sesuatu seperti Putty , login jarak jauh ke kotak Linux itu.
  4. Jalankan perintah Anda di folder yang dipasang.
Camilo Martin
sumber
0

Untuk menjalankan skrip shell dari windows. Pertama gunakan perintah: dos2unix maka Anda dapat menggunakan perintah normal Anda: sh runide.sh

Ini akan berhasil.

Sridhar GV
sumber
Maaf, sedikit koreksi perlu dilakukan. Gunakan perintah: "dos2unix runide.sh" Output: dos2unix: mengkonversi file runide.sh ke format UNIX maka Anda menggunakan perintah Anda: "sh runide.sh" Ini pasti akan menjalankan skrip shell Anda. Selamat belajar
Sridhar GV
pertanyaannya bukan tentang format file, melainkan tentang kurangnya shell di windows.
Archemar
0

Meskipun jawaban yang ada di sini adalah benar pada saat itu, Windows 10 tidak sekarang opsional termasuk versi modifikasi dari Ubuntu menjalankan shell bash penuh .

Setelah dibuat dapat dieksekusi, skrip dapat dijalankan dengan cara biasa dari dalam bash, misalnya:

chmod +x myscript.sh
./myscript.sh

Jika Anda ingin menjalankan skrip langsung dari Windows, Anda dapat membuat pintasan di direktori yang sama dan mengatur 'Target' ke sesuatu seperti:

C:\Windows\System32\bash.exe -c "./myscript.sh"

Jika jalur skrip Anda relatif ke lokasi pintasan (seperti contoh di atas) pastikan bidang 'Mulai di' juga kosong.

Molombi
sumber