Como dar um comando que rode dois comandos?

Tem uma coisa aqui que funciona só se eu digito um comando em uma aba e depois outro em outra aba, mas preciso que um único comando faça os dois, já tentei:

$ comando1 & comando2
e também:
$ comando1 && comando2

mas nenhum funcionou. Preciso disso porque esse dois comandos abrem um app e depois o configuram, quero criar um atalho para esse app e gostaria que fosse apenas um lançador e não dois(um para cada comando).

Qualquer ajuda será muito apreciada.

ponto e virgula ;

$ comando1 ; comando2

2 Curtidas

comando1 && comando2 #caso vc queira que, caso o primeiro comando não dê erro, o segundo seja executado

e

comando1 ; comando2 #caso vc queira que seu programa rode independe do retorno que o outro programa tenha dado

já seriam suficientes, porém se vc quiser passar a saída de um comando pra outro é assim:

comando1 | comando2

2 Curtidas

Não é mais fácil montar um script com os dois comandos e depois tu só executa o script.

1 Curtida

Gente passei uma informação errada pra vocês, testei o comando do jeito que está acima direto no terminal e deu certo, o problema foi que eu tinha testado desse jeito apenas no lançador, então fui no lançador e coloquei de novo esse comando e habilitei a função abrir no terminal. Ainda assim não funciona, só direto pelo terminal mesmo. Por que será?

Pensei nisso, o problema é que tenho zero conhecimento de scripts, mas imagino que deve ser fácil desse jeito, afinal são só dois comandos, vou aprender um pouco sobre isso, vai ser útil no futuro.

Tente botar no Comando do lançador:

`comando1 & comando2` (entre acentos graves)

Isso vai rodar o comando como se fosse algo digitado no terminal, em vez de caçar um programa chamado especificamente comando1 & comando2 pelas pastas do sistema.

1 Curtida

Se faço isso no terminal da certo mas se faço no lançador nem aparece o ícone no menu. Quando tiro os acentos ele volta a aparecer.

Tente então a formulação alternativa pra mesma coisa:

/bin/sh -c "comando1 & comando2"
(não precisa de `)

1 Curtida

Também não deu.

Cara porque vc não posta os comandos?
Eles são segredo de estado?
Coloca eles ai.

Ahh tá, foi mal, achei que não fazia diferença :sweat_smile:
$ droidcam & pacmd load-module module-alsa-source device=hw:Loopback,1,0

Como seria um script?

  1. Crie um arquivo com um nome qualquer, por exemplo, dupla.sh
    Coloque como conteúdo #! /bin/sh na primeira linha e na segunda o comando de terminal que você quer rodar
#! /bin/sh
droidcam & pacmd load-module module-alsa-source device=hw:Loopback,1,0
  1. Confirme as permissões de execução com botão direito/propriedades ou chmod +x /caminho/do/dupla.sh
  2. Coloque o caminho completo do dupla.sh no lançador.
1 Curtida

Pra rodar, sudo bash dupla.sh
Certo?

sudo nesse contexto não só é desnecessário como perigoso.

sudo inicia os dois programas na conta do administrador/root e não do usuário atual, o que abre brechas de segurança e inutiliza o pacmd (ele vai modificar as configurações do som do usuário root, e não do usuário “normal” atual, que é o que ele está tentando fazer aqui).

Normalmente bastaria bash dupla.sh , mas lá em cima eu pus #! /bin/sh , que basicamente avisa ao sistema operacional que o arquivo deve ser processado pelo /bin/sh , um equivalente mais leve do Bash. Nome disso é Shebang, você pode fazer isso com Python também.

Ou seja:

  • sudo bash dupla.sh → inútil e perigoso
  • bash dupla.sh → funciona
  • ./dupla.sh → funciona, porque eu botei #! /bin/sh lá em cima

EDIT: nem sempre sudo bash algo.sh é inútil e perigoso, às vezes realmente o script vai mexer profundamente no sistema e é necessário permissão de administrador. Aqui, ele quer automatizar coisas do usuário normal dele, logo sudo é apenas um perigo.

2 Curtidas

Ah, sim… legal, bom saber! Script é algo novo pra mim, sempre legal aprender

2 Curtidas

Usei o
$ bash dupla.sh
porque quando coloco ./ no lançador ele some assim como quando coloco entre acentos graves.

1 Curtida

Muito obrigado pela ajuda. Mais uma vez.