Como posso iniciar vários processos com um único comando?

3

Eu uso pianobar player. Mas antes de iniciá-lo, preciso executar tor e polipo . Ambos são contínuos (estão em execução até serem interrompidos). Basicamente, o que eu estou procurando é um único comando que geraria tor e polipo processos (sua saída não é necessária) e então abriria o pianobar em primeiro plano.

Editar: Acontece que tor leva vários segundos para começar, e é por isso que as soluções sugeridas não funcionaram no começo. Eu postei isso no caso de alguém ter o mesmo problema:

function piano {
    tor &
    polipo &
    sleep 3
    pianobar &&
    killall tor
    killall polipo
}
    
por seeker_of_bacon 10.07.2016 / 07:33

2 respostas

2

coloque isso no seu .profile ou .bashrc ou .zshrc ou qualquer shell que você use:

function mycommand {
    tor &
    polipo &
    planobar
}

E agora é só executar mycommand

    
por 10.07.2016 / 07:56
7

Isto é o que os scripts de shell são para ; para executar vários comandos enquanto apenas digita um. A seguir, um pequeno script que, acredito, faz o que você pediu:

#!/bin/sh

tor    & tor_pid=$!
polipo & polipo_pid=$!

sleep 5
pianobar

kill $tor_pid
kill $polipo_pid

Coloque isso em um arquivo, talvez $HOME/local/bin/startpiano , torne-o executável com chmod +x $HOME/local/bin/startpiano e adicione $HOME/local/bin ao final de sua variável PATH .

Esta é também a função do shell ; para executar uma tarefa logicamente distinta. Você pode criar uma função shell assim:

startpiano () {
  tor    & tor_pid=$!
  polipo & polipo_pid=$!

  sleep 5
  pianobar

  kill $tor_pid
  kill $polipo_pid
}

Isto iria em um dos arquivos de inicialização para o seu shell particular.

EDITAR : Com a pergunta editada, eu aconselho a não usar um alias, já que a tarefa agora se tornou um pouco complexa demais. Deixarei meu texto original sobre aliases aqui intactos.

Isto é também o que os aliases são para ; fazer coisas simples que você não precisa digitar de novo e de novo. É assim que você define um alias para ele:

alias startpiano="polipo &; tor &; pianobar"

Isso também aconteceria em um dos scripts de inicialização do seu shell.

Qualquer uma dessas três soluções permitirá que você digite

$ startpiano

para iniciar os programas de que você precisa.

  • O shell script tem o benefício sobre a função shell e o alias de não adicionar mais peso aos seus arquivos de inicialização do shell (além de anexar sua localização ao final da variável PATH ).

  • A função shell tem o benefício sobre o alias que depois você pode adicionar argumentos de linha de comando (também para o script), e que é legível (e de muitas maneiras se comporta como seu próprio "script") ).

  • O alias funciona, mas na verdade, o único uso de aliases é substituir coisas realmente simples por coisas mais curtas para o benefício de seus dedos, como sinalizadores de linha de comando para ls etc. ( alias ls="ls -F" é o apenas alias que eu tenho).

por 10.07.2016 / 08:07