Bagaimana cara menggunakan "<<" dalam file batch atau command prompt?

12

Saya tahu apa >>yang digunakan untuk, menulis semua pesan ke dalam file, bukan layar. Dan saya kira <<lakukan terbalik, saya mencobanya dan menerima pesan:<< was unexpected at this time.

Tolong beri tahu saya apa yang <<digunakan untuk dan bagaimana menggunakan.

DMaster
sumber

Jawaban:

17

Shell perintah Windows standar - cmd.exe- tidak menggunakan <<operator sama sekali

Satu <berarti "membaca file menjadi input standar " cmd.exe, tetapi dua <karakter back-to-back tidak ada artinya cmd.exe, sehingga memberikan kesalahan yang Anda dapatkan.

The <<Operator adalah bermakna untuk semua jenis utama dari Unix perintah shell , di mana ia digunakan untuk di sini-dokumen : ²

$ some-command <<END
blah blah blah
blah blah
blah blah blah blah blah
END

Tiga baris itu dikirim ke some-commandinput standarnya.

Ini berguna untuk mengirim banyak teks ke dalam perintah tanpa menulisnya ke file terlebih dahulu, seperti yang Anda harus lakukan dengan <operator. Saya sering menggunakannya untuk menyematkan pesan "penggunaan" ke dalam skrip:

#!/bin/sh
if [ -z "$1" ]
then
    cat <<USAGE
usage: myscript <files...>

     Grobbles the foobie for all files given on the command line.

USAGE

    exit 1
fi

# ... do something with command line arguments

Ini lebih baik daripada menulis banyak echopernyataan karena teks heredoc diformat persis seperti yang dicetak ke layar. Selain itu, lebih mudah untuk berurusan dengan spasi, mengutip, redirection, dan interpolasi variabel dalam konteks ini. Perhatikan, misalnya, bahwa saya telah menggunakan kurung sudut dalam pesan penggunaan tanpa harus melakukan apa pun yang pintar untuk mencegah shell mencoba menggunakannya untuk pengalihan I / O.

Jika Anda ingin melakukan hal-hal seperti ini di Windows, Anda dapat menginstal Cygwin dan menggunakan salah satu cangkangnya. Jika Anda menggunakan Windows 10, Anda bisa menggunakan WSL sebagai gantinya.


Catatan kaki:

  1. Tautan itu masuk ke pohon dokumentasi Windows XP yang diarsipkan. Microsoft mematahkan tautan yang sebelumnya saya gunakan ketika mereka mengarsipkan dokumen ini, jadi jika mereka memutuskannya lagi, berikut adalah referensi pihak ketiga cadangan.

    Satu-satunya cmd.exebahan referensi lain yang saya ketahui di microsoft.com adalah Windows Commands PDF (4,9 MB, 948 halaman) yang tidak lebih dari memberikan referensi untuk sebagian besar (!) Perintah internal bawaan dan yang disediakan Microsoft Anda bisa memberi saat cmddiminta. PDF ini tidak lengkap pada dua basis. Pertama, dan yang paling relevan di sini, tidak ada diskusi gabungan tentang bagaimana pengalihan bekerja di cmd.exeshell; bahkan tidak ada diskusi tentang tata bahasa shell. Kedua, daftar perintah PDF tidak lengkap: hal pertama yang saya kebetulan cek tidak tercakup: diskpart.

    Saya percaya semua ini mengikuti upaya jelas Microsoft untuk mengganti cmd.exedengan PowerShell , yang telah berlangsung selama bertahun-tahun sekarang. Dalam pembaruan Windows 10 terbaru pada tulisan ini, mereka telah mengambil langkah lebih lanjut untuk menyembunyikan keberadaancmd.exe , meskipun belum sepenuhnya hilang.

    Perlu dicatat bahwa PowerShell juga tidak mendukung <<operator pengalihan . Maupun - dalam regresi menyedihkan dari kedua shell Unix dan cmd.exe- apakah itu mendukung <pengalihan!

  2. Cara kanonik untuk memulai dokumen di sini adalah seperti yang saya tulis di atas, tanpa ruang antara <<dan kata pembatas. Ingatan kabur saya adalah bahwa semua penggunaan dokumen-dokumen yang saya lihat di skrip shell juga dilakukan dengan cara ini. Spesifikasi POSIX untuk dokumen di sini juga menggunakan gaya ini dalam contohnya.

    Namun, pembacaan yang cermat atas bagian lain dari spesifikasi POSIX.1-2008 mengungkapkan bahwa adalah sah untuk menempatkan sejumlah spasi atau karakter tab antara kata <<dan pembatas. Khususnya, lihat aturan pengakuan token 7 dan 10 , definisi io_heredalam tata bahasa shell , dan definisi kelas karakter "kosong" .

    Begitulah cara Anda mendokumentasikan shell. Catat, Microsoft. ;)

    Menguji di sini di Bash 4 dan ksh93mengkonfirmasi bahwa ini berfungsi seperti yang diharapkan.

Warren Young
sumber
Tidak bisa mengatakannya sendiri dengan lebih baik. Kecuali saya tidak akan menyebutkan Cygwin karena ada sesuatu yang Anda lakukan di Windows dan yang lainnya dengan Unix. Ada banyak kompatibilitas lintas ya namun saya sangat menyarankan hanya belajar Unix mentah daripada beberapa pekerjaan virtual di sekitar seperti Cygwin atau beberapa utilitas berbasis Win lainnya.
BiTinerary
8
@BiTinerary: Mengingat bahwa sejumlah besar orang menggunakan Cygwin setiap hari secara khusus untuk dapat melakukan hal-hal seperti Unix di Windows, saya pikir saya akan meninggalkan petunjuk itu dalam jawabannya.
Warren Young
Ya, saya tidak bermaksud merendahkan keaslian Cygwin, saya menggunakannya untuk tugas-tugas duniawi sekarang dan kemudian. Saya hanya memasukkan dua sen saya untuk booting hal yang nyata dan belajar bahwa (terutama untuk pemula) lebih baik daripada belajar sesuatu pihak ke-3 atau spin-off dari yang asli yang harus sesuai dengan OS yang sama sekali berbeda. Saya hanya bermaksud mengatakan bahwa dalam jumlah waktu yang dibutuhkan untuk pengaturan Cygwin, tentukan semua modul yang disertakan + mulai menggunakannya, Anda bisa belajar banyak dalam hal yang sebenarnya. Saya merasa seperti Cygwin adalah apa yang Anda gunakan setelah Anda selesai melakukannya dan hanya tidak ingin melakukan reboot
BiTinerary
Nit: (Unix) heredoc tidak mengenali redirection dan pipe, tetapi secara default DOES mengenali parameter / variabel substitusi dan substitusi proses (baik sintaks dollar-parens dan backticks); untuk menekan yang menggunakan backslash dalam data atau mengutip (setidaknya satu karakter dari) kata pembatas pada baris perintah.
dave_thompson_085
4

> menulis ke file BARU.

>> ditambahkan ke file

< membaca dari file

| mengirimkan output perintah ke input perintah lain

Lihat di sini untuk daftar. Apakah mengetik% ^ ke dalam cmd.exe adalah telur paskah Windows?

Sejak itu diposting ini telah ditambahkan.

Starting a Program
===============

See start /? and call /? for help on all three ways.

Specify a program name
--------------------------------

    c:\windows\notepad.exe

In a batch file the batch will wait for the program to exit. When
typed the command prompt does not wait for graphical
programs to exit.

If the program is a batch file control is transferred and the rest of the calling batch file is not executed.

Use Start command
--------------------------

    start "" c:\windows\notepad.exe

Start starts a program and does not wait. Console programs start in a new window. Using the /b switch forces console programs into the same window, which negates the main purpose of Start.

Start uses the Windows graphical shell - same as typing in WinKey + R (Run dialog). Try 

    start shell:cache

Use Call command
-------------------------

Call is used to start batch files and wait for them to exit and continue the current batch file.
pelatuk
sumber