Làm cách nào để chuyển hướng Echo sang stderr?

Một lưu ý nhỏ khi nhìn thấy những thứ này. với lệnh less, bạn có thể xem cả thiết bị xuất chuẩn [sẽ vẫn còn trên bộ đệm] và thiết bị xuất chuẩn sẽ được in trên màn hình, nhưng bị xóa khi bạn cố gắng 'duyệt' bộ đệm

Điều này sẽ khiến đầu ra của chương trình được ghi vào một tệp

________0
Ở đây, một tệp có tên 'ls-l. txt' sẽ được tạo và nó sẽ chứa những gì bạn sẽ thấy trên màn hình nếu bạn gõ lệnh 'ls -l' và thực thi nó

Điều này sẽ khiến đầu ra tiêu chuẩn của chương trình được ghi vào một tệp

________1
Ở đây, một tệp có tên 'grep-errors. txt' sẽ được tạo và nó sẽ chứa những gì bạn sẽ thấy phần stderr của đầu ra của lệnh 'grep da *'

Điều này sẽ khiến đầu ra thiết bị xuất chuẩn của chương trình được ghi vào cùng một bộ mô tả tệp sau đó là thiết bị xuất chuẩn

________2
Ở đây, phần xuất chuẩn của lệnh được gửi tới thiết bị xuất chuẩn, bạn có thể nhận thấy rằng theo nhiều cách khác nhau

Điều này sẽ khiến đầu ra thiết bị xuất chuẩn của chương trình được ghi vào cùng một bộ mô tả tệp sau đó là thiết bị xuất chuẩn

________3
Ở đây, phần thiết bị xuất chuẩn của lệnh được gửi tới thiết bị xuất chuẩn, nếu bạn chuyển sang ít hơn, bạn sẽ thấy các dòng thường 'biến mất' [vì chúng được ghi vào thiết bị xuất chuẩn] hiện đang được lưu giữ [vì chúng đang ở thiết bị xuất chuẩn]

Điều này sẽ đặt mọi đầu ra của chương trình vào một tệp. Điều này đôi khi phù hợp với các mục cron, nếu bạn muốn một lệnh được truyền trong im lặng tuyệt đối

Khi bạn chuyển hướng bất kỳ đầu ra lệnh nào sang một tệp, bạn sẽ nhận thấy rằng các thông báo lỗi được in trên cửa sổ đầu cuối. Bất kỳ lệnh nào được thực thi trong bất kỳ trình bao Linux nào, chẳng hạn như bash, đều sử dụng ba luồng I/O thông thường. Một bộ mô tả tệp số được sử dụng để đại diện cho từng luồng

  • Luồng đầu vào tiêu chuẩn [stdin]. 0
  • Luồng đầu ra tiêu chuẩn [thiết bị xuất chuẩn]. 1
  • Luồng lỗi tiêu chuẩn [stderr]. 2

Trong bài đăng này, chúng tôi sẽ nắm bắt thông tin liên quan đến việc chuyển hướng thiết bị xuất chuẩn và thiết bị xuất chuẩn sang tệp

Đầu ra tiêu chuẩn [thiết bị xuất chuẩn]

Mỗi hệ điều hành dựa trên Linux có hình ảnh về một vị trí mặc định cho lệnh được thực thi. Mọi người đề cập đến khái niệm này là "đầu ra tiêu chuẩn" hoặc "đầu ra tiêu chuẩn" để làm cho âm thanh dễ dàng hơn. Shell Bash hoặc Zsh của bạn liên tục tìm kiếm vị trí đầu ra mặc định. Khi trình bao phát hiện đầu ra mới, nó sẽ hiển thị trên màn hình thiết bị đầu cuối để bạn xem. Nếu không, nó sẽ gửi đầu ra đến vị trí mặc định của nó

Lỗi tiêu chuẩn [stderr]

Lỗi tiêu chuẩn hoặc thiết bị xuất chuẩn tương tự như đầu vào và đầu ra tiêu chuẩn, nhưng nó được sử dụng để lưu trữ các thông báo lỗi. Lỗi tiêu chuẩn có thể được chuyển hướng đến dòng lệnh hoặc tệp bằng thiết bị đầu cuối. Nếu bạn muốn ghi hoặc lưu trữ tin nhắn trong một tệp nhật ký riêng hoặc ẩn thông báo lỗi, chuyển hướng stderr sẽ giúp bạn. Bây giờ hãy hướng tới khía cạnh thực tế của chuyển hướng thiết bị xuất chuẩn và thiết bị xuất chuẩn

Chuyển hướng thiết bị xuất chuẩn và thiết bị xuất chuẩn sang tệp

Vì chuyển hướng là một phương pháp ghi lại đầu ra của chương trình và gửi nó dưới dạng đầu vào cho một lệnh hoặc tệp khác. Các luồng I/O có thể được chuyển hướng bằng cách sử dụng toán tử n>, trong đó n là số mô tả tệp. Để chuyển hướng thiết bị xuất chuẩn, chúng tôi sử dụng “1>” và đối với thiết bị xuất chuẩn, “2>” được thêm làm toán tử

Chúng tôi đã tạo một tệp có tên là mẫu. txt” để lưu trữ đầu ra được chuyển hướng trong thư mục hiện tại của chúng tôi

[lệnh > tệp] được coi là toán tử chuyển hướng cổ điển chỉ chuyển hướng đầu ra tiêu chuẩn với lỗi tiêu chuẩn được hiển thị trong thiết bị đầu cuối. Chúng tôi cũng sẽ trình bày các tùy chọn khác nhau để chuyển hướng stderr

Chuyển hướng thiết bị xuất chuẩn và thiết bị xuất chuẩn sang các tệp riêng biệt

Dưới đây là cú pháp lệnh để chuyển hướng thiết bị xuất chuẩn và thiết bị xuất chuẩn sang các tệp riêng biệt

lệnh > ra 2>error

Lệnh dưới đây sẽ chuyển hướng đầu ra tới tệp “out” và thông báo lỗi tới tệp “error”

$ mèo mẫu. txt > ra 2>error

Chuyển hướng thiết bị xuất chuẩn sang thiết bị xuất chuẩn

Một thực tế phổ biến là chuyển hướng stderr với đầu ra tiêu chuẩn của chương trình để lưu trữ mọi thứ trong một tệp. Đây là cú pháp lệnh để chuyển hướng thiết bị xuất chuẩn sang thiết bị xuất chuẩn

lệnh > ra 2>&1

$ ls > tệp mẫu. txt 2>&1

$ cat samplefile.txt

> chuyển hướng ra chuyển hướng thiết bị xuất chuẩn sang tệp mẫu. txt và 2>&1 sẽ chuyển hướng thiết bị xuất chuẩn đến vị trí hiện tại của thiết bị xuất chuẩn

Nếu thiết bị xuất chuẩn được chuyển hướng đến thiết bị xuất chuẩn trước, hãy sử dụng lệnh được cung cấp bên dưới để chuyển hướng thiết bị xuất chuẩn sang một tệp

lệnh 2>&1 > file

$ ls -al 2>&1 > samplefile.txt

$ cat tệp mẫu. txt

“&>” cũng được sử dụng cho cùng chức năng mà “2>&1” thực hiện

lệnh &> tệp

$ ls &> tệp mẫu. txt

$ cat tệp mẫu. txt

Chuyển hướng thiết bị xuất chuẩn và thiết bị xuất chuẩn sang một tệp

Tất cả các trình bao không hỗ trợ chuyển hướng biểu mẫu này, nhưng bash và Zsh hỗ trợ nó. Thiết bị xuất chuẩn và thiết bị xuất chuẩn có thể được chuyển hướng bằng cách sử dụng cú pháp sau

lệnh &> ra

$ mèo mẫu. txt &> ra

Trong phần sắp tới của bài viết, chúng ta sẽ xem ví dụ riêng về chuyển hướng thiết bị xuất chuẩn và thiết bị xuất chuẩn

Chuyển hướng thiết bị xuất chuẩn sang một tệp

Đầu ra tiêu chuẩn được biểu thị bằng “1” trong danh sách các số mô tả tệp. Đối với lệnh chuyển hướng không có bất kỳ số mô tả tệp nào, thiết bị đầu cuối đặt giá trị của nó thành “1”. Cú pháp để chuyển hướng thiết bị xuất chuẩn sang một tệp được đưa ra như sau

lệnh > tệp

Chúng tôi đang sử dụng “mẫu. file” để lưu trữ đầu ra tiêu chuẩn của lệnh “ls -al”

$ ls -al > mẫu. txt

$ cat mẫu. txt

lệnh 1> tệp

$ ls 1> mẫu. txt

$ cat mẫu. txt

Chuyển hướng stderr sang một tệp

Sử dụng toán tử “2>” để chuyển hướng stderr tới một tệp

lệnh 2> tệp

$ ls -al 2> sample.txt

Chúng ta có thể kết hợp việc thực thi cho thiết bị xuất chuẩn và thiết bị xuất chuẩn trong một lệnh chuyển hướng duy nhất

lệnh 2> . txt 1> đầu ra. txt

Trong ví dụ dưới đây, các thông báo lỗi sẽ được lưu trong “error. txt,” trong đó “đầu ra. txt” sẽ có đầu ra tiêu chuẩn là “lệnh ls. ”

$ ls 2> . txt 1> đầu ra. txt

$ cat đầu ra. txt

Sự kết luận

Có khái niệm về chuyển hướng và bộ mô tả tệp cho luồng I/O là rất có giá trị khi làm việc trong thiết bị đầu cuối Linux. Trong bài đăng này, chúng ta đã nói về các luồng I/O thông thường, bao gồm thiết bị xuất chuẩn và thiết bị xuất chuẩn. Phần đầu tiên của bài đăng này mang đến cho bạn thông tin chi tiết về chuyển hướng, luồng I/O và bộ mô tả tệp số. Tiếp theo, bạn đã thấy ví dụ thực tế cho các dạng chuyển hướng thiết bị xuất chuẩn và thiết bị xuất chuẩn khác nhau

Chủ Đề