Ada beberapa cara untuk menjalankan perintah yang berbeda pada bash
dan cmd
dengan skrip yang sama.
cmd
akan mengabaikan baris yang dimulai dengan :;
, seperti yang disebutkan dalam jawaban lain. Ini juga akan mengabaikan baris berikutnya jika baris saat ini diakhiri dengan perintah rem ^
, karena ^
karakter akan keluar dari jeda baris dan baris berikutnya akan diperlakukan sebagai komentar olehrem
.
Sedangkan untuk membuat garis bash
abaikan cmd
, ada beberapa cara. Saya telah menyebutkan beberapa cara untuk melakukannya tanpa melanggar cmd
perintah:
#
Perintah tidak ada (tidak disarankan)
Jika tidak ada #
perintah yang tersedia cmd
saat skrip dijalankan, kita dapat melakukan ini:
# 2>nul & echo Hello cmd! & rem ^
echo 'Hello bash!' #
The #
karakter pada awal cmd
merek garis bash
memperlakukan bahwa garis sebagai komentar.
The #
karakter pada akhir bash
baris digunakan untuk komentar pada \r
karakter, seperti Brian Tompsett tunjukkan dalam jawabannya . Tanpa ini, bash
akan memunculkan kesalahan jika file memiliki \r\n
akhiran baris, diperlukan olehcmd
.
Dengan melakukan # 2>nul
, kami menipu cmd
untuk mengabaikan kesalahan dari beberapa #
perintah yang tidak ada , sambil tetap menjalankan perintah yang mengikuti.
Jangan gunakan solusi ini jika ada #
perintah yang tersedia di PATH
atau jika Anda tidak memiliki kendali atas perintah yang tersedia untuk cmd
.
Menggunakan echo
untuk mengabaikan #
karakter dicmd
Kita dapat menggunakan echo
dengan keluarannya yang diarahkan untuk memasukkan cmd
perintah di bash
area yang dikomentari:
echo >/dev/null # >nul & echo Hello cmd! & rem ^
echo 'Hello bash!' #
Karena #
karakter tidak memiliki arti khusus cmd
, itu diperlakukan sebagai bagian dari teks ke echo
. Yang harus kita lakukan adalah mengarahkan output dari echo
perintah dan memasukkan perintah lain setelahnya.
#.bat
File kosong
echo >/dev/null # 1>nul 2> #.bat
# & echo Hello cmd! & del #.bat & rem ^
echo 'Hello bash!' #
The echo >/dev/null # 1>nul 2> #.bat
garis menciptakan kosong #.bat
berkas sementara di cmd
(atau mengganti yang sudah ada #.bat
, jika ada), dan tidak apa-apa saat bash
.
File ini akan digunakan oleh cmd
baris berikutnya meskipun ada beberapa #
perintah lain di PATH
.
The del #.bat
perintah pada cmd
kode -specific menghapus file yang telah dibuat. Anda hanya perlu melakukan ini di cmd
baris terakhir .
Jangan gunakan solusi ini jika #.bat
file mungkin ada di direktori kerja Anda saat ini, karena file itu akan dihapus.
Direkomendasikan: menggunakan here-document untuk mengabaikan cmd
perintah dibash
:; echo 'Hello bash!';<<:
echo Hello cmd! & ^
:
Dengan menempatkan ^
karakter di akhir cmd
baris, kita keluar dari baris baru, dan dengan menggunakan :
sebagai pemisah dokumen di sini, konten baris pembatas tidak akan berpengaruh cmd
. Dengan begitu, cmd
hanya akan mengeksekusi barisnya setelah :
baris berakhir, memiliki perilaku yang sama seperti bash
.
Jika Anda ingin memiliki banyak baris di kedua platform dan hanya mengeksekusinya di akhir blok, Anda dapat melakukan ini:
:;( #
:; echo 'Hello' #
:; echo 'bash!' #
:; );<<'here-document delimiter'
(
echo Hello
echo cmd!
) & rem ^
here-document delimiter
Selama tidak ada cmd
garis yang tepat here-document delimiter
, solusi ini akan berhasil. Anda dapat mengubah here-document delimiter
ke teks lain.
Di semua solusi yang disajikan, perintah hanya akan dijalankan setelah baris terakhir , membuat perilakunya konsisten jika melakukan hal yang sama di kedua platform.
Solusi tersebut harus disimpan ke file dengan \r\n
jeda baris, jika tidak, solusi tersebut tidak akan berfungsi cmd
.