Perpipaan banyak perintah

8

Saya ingin menjalankan perintah berikut dan meng-stout keduanya ke TextEdit:

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

Ini tidak berfungsi, itu hanya mengeksekusi yang terakhir:

Bagaimana?

njboot
sumber

Jawaban:

11

Aahhh, bashpengalihan: -

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

Itu menjalankan perintah Anda sebagai perintah bash tunggal (itulah efek dari &&) dalam sub-shell (yang merupakan pembungkusnya di ()lakukan) dan mengarahkan output sub-shell ke TextEdit untuk Anda. Secara teknis Anda tidak harus menggunakan &&alih-alih ;tetapi efek dari mengubahnya adalah bahwa jika salah satu perintah gagal akan menghentikan seluruh rantai pada saat itu.

Catatan: Dalam contoh Anda semua perintah sedang dijalankan (seperti yang dapat Anda buktikan dengan hanya berjalan pmset -g; echo; pmset -g assertionsdi baris perintah), hanya saja Anda menerapkan pipa hanya untuk yang terakhir. Karena itu perlu dijalankan dalam subkulit.

Catatan: Anda dapat mengganti |karakter dengan >dan mengirim output ke file jika Anda mau.

Tony Williams
sumber
Tip kecil ini sangat membantu. Seluk beluk perintah bawaan / karakter khusus jarang didokumentasikan. Terima kasih lagi.
njboot
4

() menggabungkan perintah-perintah menjadi satu proses tunggal, menyatukannya menjadi stdout:

(pmset -g; echo; pmset -g assertions) | open -f -a TextEdit
aku akan
sumber