Building tắt của câu trả lời ngoozeff
's, nếu bạn muốn thực hiện một lệnh chạy hoàn toàn trong nền (ví dụ, nếu bạn muốn giấu sản lượng của nó và ngăn ngừa nó khỏi bị giết khi bạn đóng nó thiết bị đầu cuối cửa sổ), bạn có thể làm điều này thay vì:
cmd="google-chrome";
"${cmd}" &>/dev/null &disown;
&
(người đầu tiên một) đã tách lệnh từ stdin
.
>/dev/null
detaches phiên làm việc phiên bản từ stdout
và stderr
.
&disown
xóa lệnh khỏi danh sách công việc của vỏ .
Bạn cũng có thể sử dụng &!
thay vì &disown
; chúng đều là cùng một lệnh.
Ngoài ra, khi đặt một lệnh bên trong của một biến, nó thích hợp hơn để sử dụng eval "${cmd}"
hơn "${cmd}"
:
cmd="google-chrome";
eval "${cmd}" &>/dev/null &disown;
Nếu bạn chạy lệnh này trực tiếp tại ga, nó sẽ hiển thị các PID của quá trình mà lệnh bắt đầu. Nhưng bên trong tập lệnh shell, không có đầu ra sẽ được hiển thị.
Dưới đây là một chức năng cho nó:
#!/bin/bash
# Run a command in the background.
_evalBg() {
eval "[email protected]" &>/dev/null &disown;
}
cmd="google-chrome";
_evalBg "${cmd}";
http://felixmilea.com/2014/12/running-bash-commands-background-properly/
Xem thêm [BashFAQ/050] (http://mywiki.wooledge.org/BashFAQ/050). –