每次啟動機器時,我都會執行以下程式:
$ 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 &
...怎麼才能縮短邏輯?
答案1
該部分&> /dev/null
錶示輸出重定向。您可以透過將多個命令分組到一個區塊中將它們重定向到同一個檔案:
#! /bin/bash
{
google-chrome &
lantern &
xdg-open . &
emacs &
code ~/Programs/ &
xdg-open ~/Reference/topic_regex.md &
} &> /dev/null
然而,同樣的事情不能用於在後台啟動單一命令(&
)。放在&
區塊後面意味著將整個區塊作為單一腳本在背景運行。
答案2
我編寫了一個函數並將其放入我.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
答案3
您可以使用以下命令重定向所有後續命令的輸出
exec 1>/dev/null
exec 2>/dev/null
答案4
我創建了一個特殊文件,例如/dev/null
使用較短的路徑來縮短重定向。我用作/n
新文件的路徑:
sudo mknod -m 0666 /n c 1 3
這樣您可以將各行縮短為例如:
google-chrome &>/n &