ฉันรู้ว่าสิ่งที่>>
ใช้มันเขียนข้อความทั้งหมดลงในไฟล์แทนที่จะเป็นหน้าจอ และฉันคิดว่า<<
จะย้อนกลับฉันลองและได้รับข้อความ:<< was unexpected at this time.
กรุณาบอกฉันว่าสิ่งที่<<
ใช้และวิธีการใช้
ฉันรู้ว่าสิ่งที่>>
ใช้มันเขียนข้อความทั้งหมดลงในไฟล์แทนที่จะเป็นหน้าจอ และฉันคิดว่า<<
จะย้อนกลับฉันลองและได้รับข้อความ:<< was unexpected at this time.
กรุณาบอกฉันว่าสิ่งที่<<
ใช้และวิธีการใช้
คำตอบ:
เชลล์คำสั่งมาตรฐานของ Windows - cmd.exe
- ไม่ใช้<<
โอเปอเรเตอร์เลย ¹
ซิงเกิล<
หมายถึง "อ่านไฟล์ในอินพุตมาตรฐาน " ถึงcmd.exe
แต่<
อักขระสองตัวแบ็คอัพกลับไม่มีความหมายcmd.exe
ดังนั้นจึงทำให้เกิดข้อผิดพลาดที่คุณได้รับ
<<
ผู้ประกอบการเป็นที่มีความหมายกับทุกประเภทที่สำคัญของระบบปฏิบัติการยูนิกซ์เชลล์คำสั่งที่จะใช้สำหรับที่นี่เอกสาร : ²
$ some-command <<END
blah blah blah
blah blah
blah blah blah blah blah
END
ทั้งสามบรรทัดถูกส่งไปยังsome-command
อินพุตมาตรฐาน
สิ่งนี้มีประโยชน์สำหรับการส่งข้อความจำนวนมากไปยังคำสั่งโดยไม่ต้องเขียนลงในไฟล์ก่อนเนื่องจากคุณต้องใช้<
โอเปอเรเตอร์ ฉันมักจะใช้มันเพื่อฝังข้อความ "การใช้งาน" ลงในสคริปต์:
#!/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
สิ่งนี้ดีกว่าการเขียนecho
ข้อความจำนวนมากเนื่องจากข้อความในรูปแบบ heredoc นั้นถูกจัดรูปแบบเหมือนกับพิมพ์ลงบนหน้าจอ นอกจากนี้ยังง่ายต่อการจัดการกับพื้นที่สีขาวการอ้างอิงการเปลี่ยนเส้นทางและการแก้ไขตัวแปรในบริบทนี้ ตัวอย่างเช่นฉันได้ใช้วงเล็บมุมในข้อความการใช้งานโดยไม่ต้องทำอะไรที่ชาญฉลาดเพื่อป้องกันไม่ให้เชลล์พยายามใช้มันสำหรับการเปลี่ยนเส้นทาง I / O
หากคุณต้องการทำสิ่งนี้บน Windows คุณสามารถติดตั้งCygwinและใช้เชลล์ตัวใดตัวหนึ่งได้ หากคุณใช้ Windows 10 คุณสามารถใช้WSLแทน
เชิงอรรถ:
ลิงค์นั้นจะเข้าสู่แผนผังเอกสาร Windows XP ที่เก็บถาวร Microsoft ได้ทำลายลิงก์ที่ฉันเคยใช้เมื่อพวกเขาเก็บถาวรเอกสารเหล่านี้ดังนั้นในกรณีที่พวกเขาทำแตกอีกครั้งนี่เป็นข้อมูลอ้างอิงบุคคลที่สามสำรอง
cmd.exe
วัสดุอ้างอิงอื่น ๆที่ฉันทราบใน microsoft.com คือคำสั่ง Windows PDF (4.9 MB, 948 หน้า) ซึ่งทำหน้าที่ได้มากกว่าการอ้างอิงสำหรับคำสั่งภายนอกส่วนใหญ่ (!) ในตัวและ Microsoft ให้มา คุณสามารถให้ได้ในcmd
ทันที PDF นี้ไม่สมบูรณ์ในสองฐาน ก่อนอื่นและที่เกี่ยวข้องมากที่สุดที่นี่ไม่มีการพูดคุยกันถึงวิธีการเปลี่ยนเส้นทางในcmd.exe
เชลล์ ไม่มีแม้แต่การอภิปรายเกี่ยวกับไวยากรณ์เชลล์ ประการที่สองรายการคำสั่งไฟล์ PDF ไม่สมบูรณ์: diskpart
สิ่งแรกที่ผมเกิดขึ้นกับการตรวจสอบจะไม่ครอบคลุมถึง:
ฉันเชื่อว่าสิ่งเหล่านี้ทั้งหมดเกิดจากความพยายามอย่างชัดเจนของ Microsoft ในการแทนที่cmd.exe
ด้วยPowerShellซึ่งดำเนินการมาหลายปีแล้ว ในการอัปเดตล่าสุดของ Windows 10 เนื่องจากการเขียนนี้พวกเขาได้ดำเนินการขั้นตอนเพิ่มเติมเพื่อซ่อนการมีอยู่ของcmd.exe
แม้ว่ามันจะยังไม่หายไปโดยสิ้นเชิง
มันเป็นที่น่าสังเกตว่าPowerShell ยังไม่ได้รับการสนับสนุนจาก<<
ผู้ประกอบการเปลี่ยนเส้นทาง หรือในการถดถอยที่น่าเศร้าจากทั้ง Unix shells และcmd.exe
- มันรองรับการ<
เปลี่ยนเส้นทางหรือไม่!
วิธีบัญญัติของการเริ่มต้นที่นี่เอกสารเป็นเหมือนที่ฉันได้เขียนไว้ข้างต้นโดยไม่มีช่องว่างระหว่างคำ<<
และตัวคั่น ความทรงจำที่คลุมเครือของฉันคือการใช้เอกสารที่นี่ทั้งหมดที่ฉันเคยเห็นในเชลล์สคริปส์ก็ทำได้เช่นกัน ข้อกำหนด POSIX สำหรับเอกสารที่นี่ยังใช้สไตล์นี้ในตัวอย่าง
อย่างไรก็ตามการอ่านอย่างละเอียดเกี่ยวกับส่วนอื่น ๆ ของข้อมูลจำเพาะ POSIX.1-2008แสดงให้เห็นว่าการใส่อักขระช่องว่างหรืออักขระแท็บระหว่างคำ<<
และตัวคั่นจำนวนถูกต้องตามกฎหมาย โดยเฉพาะอย่างยิ่งเห็นการรับรู้กฎโทเค็น 7 และ 10 , นิยามของio_here
ในไวยากรณ์เปลือกและความหมายของ"ความว่างเปล่า" ตัวละครคลาส
นั่นคือวิธีที่คุณจัดทำเอกสารเชลล์ จดบันทึก Microsoft ;)
ทดสอบที่นี่ใน Bash 4 และksh93
ยืนยันว่าทำงานได้ตามที่คาดไว้
มี>
และ>>
มีเพียง แต่<
ไม่มี<<
command < filename Type a text file and pass the text to command
>
เขียนไปยังไฟล์ใหม่
>>
ต่อท้ายไฟล์
<
อ่านจากไฟล์
|
ส่งคำสั่งเอาต์พุตไปยังอินพุตของคำสั่งอื่น
ดูที่นี่เพื่อดูรายการพิมพ์% ^ ไปที่ cmd.exe หรือไข่อีสเตอร์ของ Windows หรือไม่
ตั้งแต่ที่ถูกโพสต์นี้ได้รับการเพิ่ม
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.