Đường ống nhiều lệnh


8

Tôi muốn chạy lệnh sau và ống dẫn của cả hai để TextEdit:

pmset -g; echo; pmset -g assertions | open -f -a TextEdit 

Điều này không hoạt động, nó chỉ thực hiện sau:

Làm sao?

Câu trả lời:


11

Aahhh, bashchuyển hướng: -

( pmset -g && echo && pmset -g assertions ) | open -f -a TextEdit

Điều đó chạy các lệnh của bạn dưới dạng một lệnh bash duy nhất (đó là hiệu ứng của &&) trong lớp vỏ phụ (là thứ bao bọc nó trong ()đó) và chuyển hướng đầu ra của lớp vỏ con thành TextEdit cho bạn. Về mặt kỹ thuật, bạn không phải sử dụng &&thay vì ;nhưng hiệu quả của việc thay đổi là nếu bất kỳ lệnh nào bị lỗi, nó sẽ dừng toàn bộ chuỗi tại thời điểm đó.

Lưu ý: Trong ví dụ của bạn, tất cả các lệnh đang được chạy (như bạn có thể chứng minh bằng cách chỉ chạy pmset -g; echo; pmset -g assertionsở dòng lệnh), chỉ là bạn đang áp dụng đường ống cho chỉ lệnh cuối cùng. Đó là lý do tại sao nó cần phải được chạy trong một subshell.

Lưu ý: rằng bạn có thể thay thế |ký tự bằng >và gửi đầu ra vào một tệp nếu bạn muốn.


Mẹo nhỏ này đã rất hữu ích. Các phần mở rộng của các lệnh / ký tự đặc biệt hiếm khi được ghi lại. Cám ơn bạn một lần nữa.
njboot

4

() Kết hợp các lệnh thành một quy trình duy nhất, nối chúng với thiết bị xuất chuẩn:

(pmset -g; echo; pmset -g assertions) | open -f -a TextEdit
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.