Rút ngắn hoặc hợp nhất nhiều dòng `&> / dev / null &`


11

Mỗi lần khởi động máy, tôi chạy chương trình sau:

$ cat start.sh
#! /bin/bash
google-chrome &> /dev/null &
lantern &> /dev/null &
xdg-open . &> /dev/null &
emacs &> /dev/null  &
code ~/Programs/ &> /dev/null &
xdg-open ~/Reference/topic_regex.md &> /dev/null &

Cồng kềnh &> /dev/null &... Làm thế nào tôi có thể rút ngắn logic?


2
Bạn có thể đặt tất cả hoặc hầu hết các chương trình đó vào Ứng dụng Khởi động của mình .
Tạm dừng cho đến khi có thông báo mới.

tuyệt vời, ứng dụng tuyệt vời. Lỗi thường xảy ra với phiên gnome gây ra sự cố đột ngột, vì vậy tôi khởi động chúng từ máy chủ tmux. @DennisWilliamson
Giải tích

Câu trả lời:


12

Phần &> /dev/nullcó nghĩa là chuyển hướng đầu ra. Bạn có thể chuyển hướng nhiều lệnh đến cùng một tệp bằng cách nhóm chúng thành một khối:

#! /bin/bash
{
google-chrome &
lantern &
xdg-open . &
emacs  &
code ~/Programs/ &
xdg-open ~/Reference/topic_regex.md &
} &> /dev/null

Tuy nhiên, điều tương tự không thể được sử dụng để bắt đầu các lệnh riêng lẻ trong nền ( &). Đặt &sau khối sẽ có nghĩa là chạy toàn bộ khối dưới dạng một tập lệnh trong nền.


Xin lưu ý rằng &>cú pháp không được dùng nữa và nên được thay thế bằng >/dev/null 2>&1 wiki-dev.bash-hackers.org/scripting/obsolete
multithr3at3d

4
@ multithr3at3d Một Bashism không tương thích với POSIX? Chắc chắn rồi! Không dùng nữa hay lỗi thời? Không , bất kể ba tác giả của danh sách này được chỉnh sửa lần cuối năm 2015 nghĩ gì. Đây là một hình thức ngắn và rút ngắn các dòng lệnh chính xác là mục tiêu của OP ở đây. Nếu ai đó chạy một #!/bin/bashtập lệnh trong một trình bao khác mà không kiểm tra tính di động thì đó chắc chắn không phải là lỗi của Bash nếu nó không hoạt động.
tráng miệng

12

Tôi đã viết một hàm và đặt nó vào trong .bashrcđể chạy mọi thứ tách rời khỏi thiết bị đầu cuối của tôi:

detach () 
{ 
    ( "$@" &> /dev/null & )
}

... và sau đó:

detach google-chrome
detach xdg-open ~/Reference/topic_regex.md

Và vì tôi lười biếng, tôi cũng đã viết một lối tắt cho xdg-open:

xo () 
{ 
    for var in "$@"; do
        detach xdg-open "$var";
    done
}

xdg-openmong đợi chính xác một đối số, nên hàm xolặp lại trên tất cả các đối số và lệnh gọi xdg-openriêng cho từng đối số.

Điều này cho phép:

detach google-chrome
xo . ~/Reference/topic_regex.md

5

Bạn có thể chuyển hướng đầu ra cho tất cả các lệnh tiếp theo với

exec 1>/dev/null
exec 2>/dev/null

3

Bạn có thể tạo một vòng lặp và cung cấp cho nó các lệnh dưới dạng đối số:

for i in google-chrome "xdg-open ." "code ~/Programs/"; do
  $i &
done &>/dev/null

Lưu ý rằng cách này chính xác như với phương pháp tiếp cận phụ với dấu ngoặc nhọn, có thể tổng hợp các đầu ra và chuyển hướng tất cả chúng cùng một lúc.


3

Tôi đã tạo một tệp đặc biệt như /dev/nullvới một đường dẫn ngắn hơn để rút ngắn chuyển hướng. Tôi đã sử dụng /nnhư đường dẫn của tệp mới:

sudo mknod -m 0666 /n c 1 3

Bằng cách này, bạn có thể rút ngắn các dòng riêng lẻ thành:

google-chrome &>/n &

Nguồn: Làm thế nào để tạo / dev / null?

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.