partes do terminal de uma expansão de comando?

0

Muitas vezes eu quero ter algum tipo de alias / substituição de 'bits' de um comando.

ex: Eu quero que o 'bkg' traduza para "2 > / dev / null > / dev / null &" para que eu possa executar aplicativos em segundo plano e não ter seu spam de saída no console como:

nautilus . bgk
>>>
nautilus . 2> /dev/null > /dev/null &

O mais próximo que consegui até agora é o seguinte:

1) Criar alias:

alias bkg="&> /dev/null > /dev/null &"

2) Antes de digitar o comando, digite alias e primeiro expanda-o via ctrl + alt + e , volte e digite o comando.

bkg       #press ctrl+alt+e
&> /dev/null > /dev/null &    #has expanded. Now go back and type cmd:
nautilus &> /dev/null > /dev/null &

No entanto, isso é um pouco complicado.

[edit] O ZSH parece ter aliases globais. Isso está perto do que eu preciso. Mas a partir das leituras, parece que o zsh não é totalmente compatível com os scripts bash. Parece que mudar para o zsh apenas para alising global, mas quebrar scripts bash pode não valer o esforço. Assim, procurando uma solução nativa bash.

[editar]
Conforme a sugestão do @ egmont, algo próximo do que eu preciso é definir um apelido:

alias quiet="&> /dev/null "

Então eu posso usá-lo como:

quiet nautilus . &

No entanto, dois problemas: "&" tem que estar no final e a predição de tabulação não funciona depois que 'quiet' é digitado.

    
por Leo Ufimtsev 06.12.2016 / 17:00

2 respostas

1

O ZSH lhe dará toda a corda que você precisa com aliases globais (e também &>/dev/null como uma maneira mais curta de escrever o redirecionamento).

% alias -g bgk='&>/dev/null &'
% sleep 20 bgk
[1] 44612
% 

No entanto, é altamente recomendável não usar aliases globais, pois eles são algo como uma arma de pé.

    
por 06.12.2016 / 17:18
1

Um recurso pouco conhecido de shells é que o redirecionamento não precisa ficar no final da linha, ele pode estar em qualquer lugar entre os argumentos ou até mesmo no começo. Em outras palavras, esses três são equivalentes:

nautilus . >/dev/null
nautilus >/dev/null .
>/dev/null nautilus .

Assim, você pode definir alias blk='>/dev/null' , que funcionará no início da linha de comando, ou definir alias naublk='nautlius >/dev/null' e, em seguida, executar naublk . e assim por diante.

Curiosamente, em bash-4.3 parece que você pode ter vários aliases para redirecionamentos no início, seguidos por um para o comando. Por exemplo:

alias dn1='> /dev/null'
alias dn2='2> /dev/null'
alias nau=nautilus
dn1 dn2 nau .
    
por 06.12.2016 / 21:51