Nói chung, tôi khuyên bạn nên làm theo cách làm của Bourne một lần nữa , vì bash được cho là vỏ Unix phổ biến nhất hiện có. Bash thường sử dụng &>
hoặc 2>&1
. IMHO, không phải là "hoàn hảo", vì vậy tôi khuyên bạn nên quên đi điều vô nghĩa đó. Trên thực tế, cái nào bạn nên sử dụng phụ thuộc vào những gì bạn đang cố gắng làm.
2>&1
hợp nhất stderr với thiết bị xuất chuẩn, có thể hữu ích nếu, ví dụ, bạn muốn chuyển văn bản stderr. Vì vậy, ví dụ, nếu bạn muốn xem chương trình có in một thông điệp stderr nào đó không, nhưng không muốn màn hình của bạn chứa đầy rác không quan trọng, có thể bạn sẽ làm gì đó như program 2>&1 | grep crashed
tìm kiếm thiết bị xuất chuẩn và thiết bị xuất chuẩn từ chương trình gọi là "chương trình" cho từ "sụp đổ".
Mặt khác, nếu bạn không muốn một chương trình in bất cứ thứ gì, bạn có thể chỉ cần chạy program &> /dev/null
, nó sẽ chuyển hướng cả stderr và stdout sang / dev / null, một tệp đặc biệt làm cho mọi thứ biến mất một cách kỳ diệu. Hoặc, nếu bạn muốn lưu kết quả của chương trình (có thể báo cáo lỗi hoặc lỗi gì đó), bạn có thể chuyển hướng cả stderr và stdout sang tệp: program &> log.txt
sẽ chuyển hướng tất cả dữ liệu sang tệp có tên là "log.txt". Nếu bạn muốn, bạn có thể chuyển hướng thiết bị xuất chuẩn và thiết bị xuất chuẩn thông qua program 2> log.txt > log.txt
hoặc program 2>&1 | cat > log.txt
, cả hai đều có tác dụng tương tự như khi sử dụng &>
. Nếu bạn làm một cái gì đó như thế program 2>&1 > file
, chỉ có thiết bị xuất chuẩn sẽ được chuyển hướng, nhưng thiết bị xuất chuẩn vẫn có thể được dẫn đến một chương trình khác, chẳng hạn như con mèo, có thể được chuyển hướng như được hiển thị ở trên. Tuy nhiên, gõ&>
dễ dàng hơn bất kỳ ví dụ nào ở trên, vì nó liên quan đến việc nhập ít ký tự hơn (và con người dễ đọc hơn một chút). Hãy lưu ý rằng program 2> log.txt > log.txt
có thể có nhiều khả năng hoạt động trên các vỏ không bash.
Tái bút: nếu bạn lo lắng về việc mọi người sử dụng các shell khác, có một thứ bạn có thể thêm vào là dòng đầu tiên của tập lệnh của bạn được gọi là "số ma thuật" hoặc "shebang". Đây thực chất là một cách để đảm bảo các máy tính khác (đặc biệt là các máy tính chạy hệ điều hành giống Unix) biết nên sử dụng chương trình nào để thực thi tập lệnh. Các kịch bản khác nhau sử dụng các shebang khác nhau. Một shebang cho một kịch bản bash trông như thế này:
#!/bin/bash
Nếu bạn sử dụng ở trên làm dòng đầu tiên của một tập lệnh đã cho, bash thường sẽ được sử dụng để thực thi tập lệnh đã nói. Điều này sẽ khiến việc ai đó vô tình thực thi tập lệnh với shell sai sẽ khó khăn hơn nhiều.
Tái bút: Tôi sẽ không nói dối: cho đến bây giờ, tôi không biết người ta có thể sử dụng >&
, nhưng, theo như bash, nó dường như làm như vậy &>
. Bạn học được điều gì mới mỗi ngày.