Toplu iş dosyasında veya komut isteminde “<<” nasıl kullanılır?


13

Ne >>için kullanıldığını biliyorum , tüm mesajları ekran yerine bir dosyaya yazıyor. Ve sanırım <<tersini yapıyorum, deniyorum ve bir mesaj aldım:<< was unexpected at this time.

Lütfen bana ne için <<kullanıldığını ve nasıl kullanılacağını söyle .

Yanıtlar:


17

Standart Windows komut kabuğu - cmd.exe- kullanmaz <<operatöre hiç

Tek bir <vasıta "dosyayı okumak standart girdi için" cmd.exe, ancak iki <karakter arka arkaya etmek anlamsızdır cmd.exebu sahip hata veriyor, böylece.

<<Operatör olduğu tüm önemli türleri için anlamlı Unix komut kabuğu bunun için kullanılır, burada-belgeler : ²

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

Bu üç hat some-commandstandart girdisine gönderilir .

Bu, bir komutla, <operatöre yapacağınız gibi, önce bir dosyaya yazmadan çok sayıda metin göndermek için kullanışlıdır . Ben sık sık bir komut dosyasına "kullanım" mesajı gömmek için kullanın:

#!/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

echoYorumlu metin tam olarak ekrana yazdırıldığı gibi biçimlendirildiğinden, bu bir sürü ifade yazmaktan daha iyidir . Ek olarak, bu bağlamda beyaz boşluk, alıntı, yönlendirme ve değişken enterpolasyon ile uğraşmak daha kolaydır. Örneğin, kabuğun bunları G / Ç yönlendirmesi için kullanmaya çalışmasını önlemek için akıllıca bir şey yapmadan kullanım iletisinde köşeli parantez kullandığım dikkat edin.

Windows'ta böyle şeyler yapmak istiyorsanız, Cygwin'i yükleyebilir ve kabuklarından birini kullanabilirsiniz. Windows 10 kullanıyorsanız, bunun yerine WSL kullanabilirsiniz .


Dipnotlar:

  1. Bu bağlantı, arşivlenmiş Windows XP belge ağacına gider. Microsoft, bu nedenle durumda tekrar kırmak, onlar bu dokümanlar arşivlenmiş zaman önce kullanıyordum linki kırdı burada bir yedek üçüncü taraf referanstır.

    cmd.exeMicrosoft.com'da bildiğim diğer tek referans malzemesi , yerleşik ve Microsoft tarafından sağlanan harici komutların çoğu (!) İçin bir referans sağlamaktan çok daha fazlasını yapmayan Windows Komutları PDF'dir (4.9 MB, 948 sayfa). cmdistemi verebilir . Bu PDF iki temelde tamamlanmamıştır. İlk olarak ve en önemlisi, yeniden yönlendirmenin cmd.exekabukta nasıl çalıştığına dair birleşik bir tartışma yoktur ; kabuk dilbilgisi tartışması bile yok. İkincisi, PDF'nin komut liste eksiktir: ben çek başına gelen ilk şey kapsamında değildir: diskpart.

    Tüm bunların, Microsoft'un uzun yıllardır devam eden PowerShellcmd.exe ile değiştirmeye yönelik net girişimlerinden kaynaklandığına inanıyorum . Bu yazıdan itibaren en son Windows 10 güncellemesinde , henüz tamamen gitmemiş olsa da, varlığını gizlemek için başka adımlar attılar .cmd.exe

    PowerShell'in bir <<yönlendirme işlecini de desteklemediğini belirtmek gerekir . Ayrıca - hem Unix mermilerinden gelen üzücü bir gerilemede hem de cmd.exe- <yeniden yönlendirmeyi desteklemiyor !

  2. Burada bir belgeyi başlatmanın standart yolu, yukarıda yazdığım <<şekildedir , ve ile sınırlayıcı sözcük arasında boşluk yoktur . Bulanık hatırlamam, kabuk metinlerinde gördüğüm burada belgelerin tüm kullanımlarının da bu şekilde yapılması. Buradaki belgeler için POSIX belirtimi ayrıca örneklerinde bu stili kullanır.

    Ancak, POSIX.1-2008 belirtiminin diğer bölümlerinin dikkatli bir şekilde okunması , <<ve sınırlayıcı sözcüğü arasına bir dizi boşluk veya sekme karakteri koymanın yasal olduğunu ortaya koymaktadır . Özel olarak, bkz belirteç tanıma 7 ve 10 kurallar , tanımı io_hereiçinde kabuk gramer ve tanımı , "boş" karakter sınıfı .

    Yani sen bir kabuk belge nasıl. Not alın, Microsoft. ;)

    Burada Bash 4'te test edilir ve ksh93bunun beklendiği gibi çalıştığını doğrular.


Kendim daha iyi söyleyemezdim. Dışında Cygwin'den bahsetmezdim çünkü Windows'da ve Unix ile yaptığınız şeyler var. Bir sürü çapraz uyumluluk var evet, ancak Cygwin veya diğer birkaç Win tabanlı yardımcı program gibi sanal işler yerine sadece ham Unix öğrenmenizi şiddetle tavsiye ederim.
BiTinerary

8
@BiTinerary: Windows'ta Unix benzeri şeyler yapabilmek için çok sayıda insanın Cygwin'i günlük olarak kullandığından, bu ipucunu cevapta bırakacağımı düşünüyorum.
Warren Young

Evet, Cygwin olan otantikliği tartışmak istemiyorum, cidden onu sıradan görevler için kullanıyorum. Ben sadece gerçek sent önyükleme ve (özellikle yeni başlayanlar için) 3. parti bir şey ya da tamamen farklı bir OS uygun olması gereken orijinal bir spin öğrenmek daha iyi olduğunu öğrenmek iki sent koyarak. Sadece Cygwin'i kurmak için gereken sürede, dahil edilen tüm modülleri belirtin + kullanmaya başlayın, gerçek şeyde çok şey öğrenmiş olabileceğinizi söylemek istiyorum. Cygwin bunu yaptıktan sonra kullandığınız şey gibi hissediyorum ve sadece yeniden başlatmak istemiyorum
BiTinerary

Nit. veri içinde ters eğik çizgi kullananları bastırmak veya komut satırında ayırıcı kelimeyi (en az bir karakter) alıntılamak.
dave_thompson_085


4

> YENİ bir dosyaya yazar.

>> bir dosyaya eklenir

< bir dosyadan okur

| başka bir komutun girdisine bir komut çıktısı gönderir

Liste için buraya bakın % ^ yazarak cmd.exe dosyasına bir Windows paskalya yumurtası mı geliyor?

Bu yayınlandığından beri bu eklendi.

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.
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.