Để chạy các lệnh đồng thời, bạn có thể sử dụng &
dấu tách lệnh.
~$ command1 & command2 & command3
Điều này sẽ bắt đầu command1
, sau đó chạy nó trong nền. Tương tự với command2
. Sau đó, nó bắt đầu command3
bình thường.
Đầu ra của tất cả các lệnh sẽ được cắt xén cùng nhau, nhưng nếu đó không phải là vấn đề với bạn, đó sẽ là giải pháp.
Nếu bạn muốn có một cái nhìn riêng về đầu ra sau này, bạn có thể dẫn đầu ra của từng lệnh vào tee
, cho phép bạn chỉ định một tệp để phản chiếu đầu ra.
~$ command1 | tee 1.log & command2 | tee 2.log & command3 | tee 3.log
Đầu ra có thể sẽ rất lộn xộn. Để chống lại điều đó, bạn có thể cung cấp cho đầu ra của mỗi lệnh một tiền tố bằng cách sử dụng sed
.
~$ echo 'Output of command 1' | sed -e 's/^/[Command1] /'
[Command1] Output of command 1
Vì vậy, nếu chúng ta kết hợp tất cả những thứ đó lại với nhau:
~$ command1 | tee 1.log | sed -e 's/^/[Command1] /' & command2 | tee 2.log | sed -e 's/^/[Command2] /' & command3 | tee 3.log | sed -e 's/^/[Command3] /'
[Command1] Starting command1
[Command2] Starting command2
[Command1] Finished
[Command3] Starting command3
Đây là một phiên bản lý tưởng hóa cao của những gì bạn có thể sẽ thấy. Nhưng đó là điều tốt nhất tôi có thể nghĩ ra ngay bây giờ.
Nếu bạn muốn dừng tất cả chúng cùng một lúc, bạn có thể sử dụng bản dựng trong trap
.
~$ trap 'kill %1; kill %2' SIGINT
~$ command1 & command2 & command3
Điều này sẽ thực thi command1
và command2
trong nền và command3
ở nền trước, cho phép bạn giết nó bằng Ctrl+ C.
Khi bạn giết tiến trình cuối cùng với Ctrl+ Ccác kill %1; kill %2
lệnh được thực thi, bởi vì chúng tôi đã kết nối thực thi của chúng với việc nhận SIGnal INTerupt, điều được gửi bằng cách nhấn Ctrl+ C.
Chúng lần lượt giết quá trình nền thứ 1 và thứ 2 (của bạn command1
và command2
). Đừng quên gỡ bẫy, sau khi bạn sử dụng xong các lệnh của mình trap - SIGINT
.
Hoàn thành quái vật của một lệnh:
~$ trap 'kill %1; kill %2' SIGINT
~$ command1 | tee 1.log | sed -e 's/^/[Command1] /' & command2 | tee 2.log | sed -e 's/^/[Command2] /' & command3 | tee 3.log | sed -e 's/^/[Command3] /'
Tất nhiên, bạn có thể nhìn vào màn hình . Nó cho phép bạn chia bàn điều khiển của bạn thành nhiều bảng điều khiển riêng biệt như bạn muốn. Vì vậy, bạn có thể theo dõi tất cả các lệnh riêng biệt, nhưng cùng một lúc.