Câu trả lời:
Trình vỏ lệnh Windows tiêu chuẩn - cmd.exe
- không sử dụng <<
nhà điều hành ở tất cả .¹
Một đơn <
có nghĩa là "đọc tập tin vào đầu vào tiêu chuẩn " đến cmd.exe
, nhưng hai <
back-to-back là vô nghĩa đối với cmd.exe
, vì vậy nó đưa ra lỗi bạn gặp phải.
Các <<
nhà điều hành Là có ý nghĩa đối với tất cả các loại chính Shell lệnh Unix , nơi nó được sử dụng cho tài liệu ở đây : ²
$ some-command <<END
blah blah blah
blah blah
blah blah blah blah blah
END
Ba dòng đó được gửi đến some-command
trên đầu vào tiêu chuẩn của nó.
Điều này hữu ích để gửi nhiều văn bản vào một lệnh mà không cần viết nó vào một tệp trước, như bạn phải làm với <
nhà điều hành. Tôi thường xuyên sử dụng nó để nhúng một thông điệp "sử dụng" vào một tập lệnh:
#!/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
Điều này tốt hơn là viết một loạt echo
báo cáo vì văn bản heredoc được định dạng chính xác như nó in ra màn hình. Ngoài ra, dễ dàng hơn để xử lý khoảng trắng, trích dẫn, chuyển hướng và nội suy biến trong bối cảnh này. Ví dụ, lưu ý rằng tôi đã sử dụng dấu ngoặc góc trong thông báo sử dụng mà không cần phải làm gì khéo léo để ngăn vỏ cố gắng sử dụng chúng để chuyển hướng I / O.
Nếu bạn muốn làm những việc như thế này trên Windows, bạn có thể cài đặt Cygwin và sử dụng một trong các vỏ của nó. Nếu bạn đang dùng Windows 10, bạn có thể sử dụng WSL thay thế.
Chú thích:
Liên kết đó đi vào cây tài liệu Windows XP được lưu trữ. Microsoft đã phá vỡ liên kết mà tôi đã sử dụng trước đây khi họ lưu trữ các tài liệu này, vì vậy trong trường hợp họ phá vỡ lại, đây là một tài liệu tham khảo của bên thứ ba dự phòng.
Chỉ khác cmd.exe
tài liệu tham khảo mà tôi biết trên microsoft.com là Lệnh Windows PDF . cmd
lời nhắc. PDF này không đầy đủ trên hai cơ sở. Đầu tiên và có liên quan nhất ở đây, không có thảo luận kết hợp về cách chuyển hướng hoạt động trong cmd.exe
vỏ; thậm chí không có một cuộc thảo luận về ngữ pháp shell. Thứ hai, danh sách lệnh của PDF không đầy đủ: điều đầu tiên tôi tình cờ kiểm tra không được đề cập: diskpart
.
Tôi tin rằng tất cả những điều này xuất phát từ những nỗ lực rõ ràng của Microsoft để thay thế cmd.exe
với PowerShell , đã diễn ra trong nhiều năm nay. Trong bản cập nhật Windows 10 gần đây nhất khi viết bài này, họ có thực hiện các bước tiếp theo để che giấu sự tồn tại của cmd.exe
, mặc dù nó chưa hoàn toàn biến mất
Điều đáng chú ý là PowerShell cũng không hỗ trợ <<
toán tử chuyển hướng . Cũng không - trong một hồi quy buồn từ cả shell Unix và cmd.exe
- nó có hỗ trợ không <
chuyển hướng!
Cách chính tắc để bắt đầu một tài liệu ở đây là như tôi đã viết ở trên, không có khoảng cách giữa <<
và từ phân cách. Hồi ức mờ nhạt của tôi là tất cả các sử dụng tài liệu ở đây mà tôi đã thấy trong các kịch bản shell cũng được thực hiện theo cách này. Đặc tả POSIX cho tài liệu ở đây cũng sử dụng phong cách này trong các ví dụ của nó.
Tuy nhiên, đọc kỹ các phần khác của Đặc điểm kỹ thuật POSIX.1-2008 tiết lộ rằng việc đặt một số ký tự khoảng trắng hoặc tab giữa <<
và từ phân cách. Đặc biệt, xem quy tắc nhận dạng mã thông báo 7 và 10 , định nghĩa của io_here
trong ngữ pháp vỏ và định nghĩa của lớp nhân vật "trống" .
Cái đó là cách bạn ghi lại một cái vỏ. Ghi chú, Microsoft. ;)
Thử nghiệm ở đây trên Bash 4 và ksh93
xác nhận rằng điều này hoạt động như mong đợi.
Có >
và >>
nhưng chỉ <
, không có <<
command < filename Type a text file and pass the text to command
>
ghi vào một tệp MỚI.
>>
nối vào một tập tin
<
đọc từ một tập tin
|
gửi một đầu ra lệnh vào đầu vào của lệnh khác
Xem ở đây để xem danh sách Việc gõ% ^ vào cmd.exe là trứng Phục sinh Windows?
Kể từ đó đã được đăng này đã được thêm vào.
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.