Làm thế nào để ẩn đầu ra thiết bị đầu cuối khi thực hiện một lệnh?


62

Khi tôi khởi chạy một số chương trình nhất định từ dòng lệnh như nhật thực và trình xem tài liệu vào ngày 11.10, nó sẽ xuất hiện một lượng thông tin có vẻ không quan trọng.

Ngoài ra, khi chúng được chạy trong nền, đôi khi chúng tiếp tục tạo đầu ra cho thiết bị đầu cuối mà tôi hiện đang làm việc, điều này gây khó chịu.

Tôi muốn họ chỉ khởi chạy và giữ các công cụ nền trong nền. Lý do của tôi là nếu bạn khởi chạy các chương trình này thông qua GUI (ví dụ như nhấp đúp vào biểu tượng) thì những thông báo này sẽ không bao giờ được hiển thị cho tôi, vì vậy tôi không cần chúng trong dòng lệnh.


Câu trả lời:


81

Nếu bạn có thể tránh việc viết nội dung trong bảng điều khiển, nó phụ thuộc vào cách tạo đầu ra từ chương trình. Nếu nó được truyền đến đầu ra tiêu chuẩn, thì nó chỉ đủ để làm

$ eclipse >/dev/null

và không có đầu ra nên được thực hiện.

Để chặn thông báo lỗi là tốt:

$ eclipse >/dev/null 2>&1

Hoặc trong bash, chỉ đơn giản là:

$ eclipse &>/dev/null

Nhưng nếu họ làm điều đó bằng cách nào đó khác đi thì đó có thể là một vấn đề để ngăn chặn nó viết trong bảng điều khiển.

nếu có thể, hãy sử dụng giải pháp được cung cấp bởi MuffinStateWide


2
Có thể muốn làm điều đó eclipse 2&>1 >/dev/nullđể thoát khỏi stderr. Mặc định chỉ chuyển hướng stdout. Và không có cách nào "khác biệt" để làm điều đó, nếu bạn thanh lọc cả thiết bị xuất chuẩn và thiết bị xuất chuẩn vào trong mạng, sẽ không có đầu ra.
TC1

@ TC1 Về nguyên tắc, một chương trình có thể mở lại / dev / tty và in đầu ra ở đó. Trong thực tế, các chương trình GUI sẽ không làm điều đó.
Random832

@ Ngẫu nhiên ít nhất là viết một email khá bất lịch sự cho anh chàng đã làm điều đó.
TC1

5
@ TC1 "2> & 1> / dev / null" sẽ chuyển hướng thiết bị xuất chuẩn sang nhóm bit, nhưng thiết bị lỗi chuẩn sẽ không được chuyển hướng. Bạn cần đảo ngược thứ tự và thực hiện: "> / dev / null 2> & 1"
William Pursell

9
bạn cũng có thể làm chỉ : eclipse &> /dev/null. Điều đó bắt cả stdin và stderr đến điểm chuyển hướng (trong bash)
warren

12

Bạn có thể tạo một hàm bash sẽ bí danh một tên lệnh và thêm một số chức năng bổ sung để đạt được những gì bạn đang yêu cầu.

Ví dụ: giả sử bạn muốn khởi chạy gvim(trình soạn thảo văn bản gui) từ dòng lệnh.

bạn có thể viết một hàm như thế này:

function gvim () {
    nohup gvim "$@" > /dev/null 2>&1 & disown
}

(thêm chức năng này vào .bashrchoặc .bash_aliasestệp của bạn để nó luôn được tải)

Giải trình:

  • điều này sẽ đặt bí danh cho gvimlệnh với hàm bash cũng được đặt tên gvim(vì vậy khi bạn gõ gvimvào dấu nhắc bash, nó sẽ gọi gvimhàm của bạn , thay vì thực thi gvimlệnh thực . Hàm của bạn sau đó gọi gvimlệnh thực (và chấp nhận các đối số thông thường của nó), với một số tính năng bổ sung:

    • chuyển hướng thiết bị xuất chuẩn và thiết bị xuất chuẩn để /dev/null(chặn đầu ra cho thiết bị đầu cuối)
    • sử dụng &để chạy lệnh trong nền (vì vậy shell của bạn không bị chặn)
    • sử dụng disownđể xóa công việc nền khỏi trình bao (vì vậy nó sẽ không xuất hiện trong danh sách các công việc đang hoạt động)
    • sử dụng nohupđể tách quy trình khỏi thiết bị đầu cuối (vì vậy bạn có thể kết thúc phiên shell của mình hoặc đóng thiết bị đầu cuối mà không làm hỏng quy trình)

btw, tôi nghĩ rằng đây là một giải pháp toàn diện hơn câu trả lời được chấp nhận từ @Misery
Corey Goldberg

6

hãy thử thêm --help như một công tắc lệnh và tìm kiếm "im lặng", điều này sẽ triệt tiêu đầu ra hoặc chỉ khởi chạy từ GUI. và khởi chạy bằng công tắc hoặc tìm cách triệt tiêu nó thông qua tập lệnh

cá nhân tôi khởi chạy từ cli để có đầu ra đó vì vậy tôi không chắc nó có thể cho tất cả các ứng dụng GUI.

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.