Cada vez que ligo a máquina, executo o seguinte programa:
$ 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 &
Pesado &> /dev/null &
... Como eu poderia encurtar a lógica?
Responder1
A parte &> /dev/null
significa redirecionamento de saída. Você pode redirecionar vários comandos para o mesmo arquivo agrupando-os em um bloco:
#! /bin/bash
{
google-chrome &
lantern &
xdg-open . &
emacs &
code ~/Programs/ &
xdg-open ~/Reference/topic_regex.md &
} &> /dev/null
A mesma coisa, entretanto, não pode ser usada para iniciar comandos individuais em segundo plano ( &
). Colocar &
depois do bloco significaria executar o bloco inteiro como um único script em segundo plano.
Responder2
Eu escrevi uma função e coloquei-a no meu .bashrc
para executar coisas desanexadas do meu terminal:
detach ()
{
( "$@" &> /dev/null & )
}
... e então:
detach google-chrome
detach xdg-open ~/Reference/topic_regex.md
E como sou preguiçoso, também escrevi um atalho para xdg-open
:
xo ()
{
for var in "$@"; do
detach xdg-open "$var";
done
}
Como xdg-open
espera exatamente um argumento, a função xo
itera sobre todos os argumentos fornecidos e chama xdg-open
cada um deles separadamente.
Isso permite:
detach google-chrome
xo . ~/Reference/topic_regex.md
Responder3
Você poderia redirecionar a saída para todos os comandos subsequentes com
exec 1>/dev/null
exec 2>/dev/null
Responder4
Criei um arquivo especial /dev/null
com um caminho mais curto para encurtar o redirecionamento. Usei /n
como caminho do novo arquivo:
sudo mknod -m 0666 /n c 1 3
Desta forma, você pode encurtar as linhas individuais para, por exemplo:
google-chrome &>/n &
Fonte:Como criar /dev/null?