ย่อหรือรวมหลายบรรทัดของ `&> / dev / null & '


11

ทุกครั้งที่เริ่มต้นเครื่องฉันเรียกใช้โปรแกรมต่อไปนี้:

$ 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 &

ยุ่งยาก&> /dev/null &... ฉันจะทำให้ตรรกะสั้นลงได้อย่างไร


2
คุณสามารถใส่ทั้งหมดหรือส่วนใหญ่ของโปรแกรมเหล่านั้นของคุณในการประยุกต์ใช้งานเริ่มต้น
หยุดชั่วคราวจนกว่าจะมีการแจ้งให้ทราบต่อไป

แอปพลิเคชั่นที่ยอดเยี่ยมและยอดเยี่ยม ข้อผิดพลาดมักจะเกิดขึ้นกับ gnome-session ทำให้เกิดความล้มเหลวอย่างฉับพลันดังนั้นฉันจึงเริ่มต้นจากเซิร์ฟเวอร์ tmux @DennisWilliamson
แคลคูลัส

คำตอบ:


12

ส่วน&> /dev/nullหมายถึงการเปลี่ยนเส้นทางการส่งออก คุณสามารถเปลี่ยนเส้นทางหลายคำสั่งไปยังไฟล์เดียวกันโดยจัดกลุ่มไว้ในบล็อก:

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

อย่างไรก็ตามสิ่งเดียวกันไม่สามารถใช้เพื่อเริ่มคำสั่งแต่ละคำสั่งในพื้นหลัง ( &) การวาง&หลังจากบล็อกจะหมายถึงการรันทั้งบล็อกเป็นสคริปต์เดียวในพื้นหลัง


โปรดทราบว่า&>ไวยากรณ์นั้นเลิกใช้แล้วและควรแทนที่ด้วย>/dev/null 2>&1 wiki-dev.bash-hackers.org/scripting/obsolete
multithr3at3d

4
@ multithr3at3d Bashism เข้ากันไม่ได้กับ POSIX? แน่นอน! เลิกหรือล้าสมัย? ไม่ไม่ว่าผู้เขียนสามคนในรายชื่อนี้จะแก้ไขครั้งสุดท้ายในปี 2558 อย่างไร มันเป็นรูปแบบย่อและการย่อบรรทัดคำสั่งเป็นเป้าหมายของ OP ตรงนี้ หากใครบางคนรัน#!/bin/bashสคริปต์ในเชลล์ที่แตกต่างกันโดยไม่ตรวจสอบความสะดวกในการพกพาก่อนอื่นมันไม่ใช่ความผิดของ Bash ถ้ามันไม่ทำงาน
ของหวาน

12

ฉันได้เขียนฟังก์ชั่นและใส่ลงไปในของฉัน.bashrcเพื่อเรียกใช้สิ่งที่แยกออกจากเทอร์มินัลของฉัน:

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

... แล้ว:

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

และเพราะฉันขี้เกียจฉันจึงเขียนทางลัดสำหรับxdg-open:

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

เนื่องจากxdg-openคาดว่าจะมีอาร์กิวเมนต์หนึ่งตัวฟังก์ชันxoจะวนซ้ำอาร์กิวเมนต์ที่กำหนดและการเรียกxdg-openแต่ละรายการแยกกัน

สิ่งนี้ทำให้:

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

5

คุณสามารถเปลี่ยนทิศทางเอาต์พุตสำหรับคำสั่งที่ตามมาทั้งหมดด้วย

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

3

คุณสามารถสร้างวงและให้คำสั่งเป็นอาร์กิวเมนต์:

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

โปรดทราบว่าวิธีนี้เหมือนกับวิธี subshell ด้วยเครื่องหมายปีกกาเป็นไปได้ที่จะสรุปผลและเปลี่ยนเส้นทางทั้งหมดในครั้งเดียว


3

ฉันสร้างไฟล์พิเศษเช่นเดียว/dev/nullกับเส้นทางที่สั้นลงเพื่อย่อการเปลี่ยนเส้นทาง ฉันใช้/nเป็นเส้นทางของไฟล์ใหม่:

sudo mknod -m 0666 /n c 1 3

วิธีนี้คุณสามารถทำให้แต่ละบรรทัดสั้นลงเช่น:

google-chrome &>/n &

ที่มา: วิธีการสร้าง / dev / null?

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.