Một lệnh tạo ra cả lỗi tiêu chuẩn và đầu ra


7

Tôi muốn làm một số xử lý sự cố trên tập lệnh bash của tôi. Có một lệnh ngắn và đơn giản tạo ra cả hai stdoutstderrđể tôi có thể sử dụng 2>&1nó không? Xin lỗi nếu điều này có vẻ tầm thường, nhưng tôi không thể nghĩ ra một cái vào lúc này.


1
ls . *blah(giả sử bạn có một số tệp hiển thị trong thư mục hiện tại và không có một kết thúc nào blah) ...
jasonwryan

@jasonwryan, tuyệt! Điều đó làm việc. Bạn có phiền khi đặt nó xuống như câu trả lời?
Câu hỏi tràn vào

Câu trả lời:


7

Một cách tiếp cận đơn giản sẽ được sử dụng lsđể liệt kê các tệp thực tế và tưởng tượng:

ls . *.blah

Điều này giả định rằng có những file có thể nhìn thấy trong thư mục làm việc và rằng bạn không có bất kỳ tập tin kết thúc bằng .blah1


1. ... và nếu bạn làm thế, chúng tôi sẽ không phán xét bạn.


1
Điều đó sẽ không hoạt động trong zsh, cá, csh, tcsh và bash -O failglob. (và ls .có thể trả về không có gì trên thiết bị xuất chuẩn nếu thư mục hiện tại chỉ có các tệp / thư mục ẩn). Tốt hơnls / /x
Stéphane Chazelas

6

Chỉ cần viết một subshell gửi đến stdoutstderr...

(echo STDOUT && echo STDERR >&2) 

Để chứng minh rằng nó hoạt động:

(echo STDOUT && echo STDERR >&2) > STDOUT.txt 2> STDERR.txt

Điều này sẽ tạo tập tin STDOUT.txtSTDERR.txtchứa các từ STDOUTSTDERRtương ứng.


2
ls / /x
df / /x
wc / /etc/passwd
od / /dev/null

Để đảm bảo thiết bị xuất chuẩn được viết trước stderr:

(w;/) # Bourne/csh like shells only.
sh -c 'w;/'
'time' w

1

Bạn có thể viết một hàm để sử dụng sau:

gen_stdout_stderr() {                                                           
    printf "%s\n" "STDERR" >&2                                                  
    printf "%s\n" "STDOUT"                                                      
}

Sau đó:

$ gen_stdout_stderr 
STDERR
STDOUT
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.