Executa vários comandos em uma linha

1

Há duas etapas que gostaria de executar em uma linha:

twinkle  -c

então

call  sip:[email protected] 

Aqui está a saída:

Euqueriarealizaressasduasetapasemumalinha,tenteitwinkle-c&&callsip:[email protected]etwinkle-ccallsip:[email protected]etwinkle-c;callsip:[email protected]etwinkle-c--immediate--callsip:[email protected]

Mastodoselesdãoessaresposta:

Existe alguma maneira de colocá-los na mesma linha?

EDITAR : O segundo comando está sendo executado no bash e não no Twinkle:

EDITEutenteiprintf%s\n'callsip:[email protected]'|twinkle-c,quefuncionaporumsegundoedepoisfechasozinho(fechaobrilhoeretornaaobash).Eledevepermanecerpiscandoenquantodurarachamada.

    
por Hamoudy 07.02.2015 / 23:22

2 respostas

1

Eu acho que twinkle está aceitando stdin e executando comandos. Então ...

printf %s\n 'call  sip:[email protected]' | cat - /dev/tty |twinkle -c

... deve fazê-lo. Se, em vez disso, twinkle é um daqueles que lê /dev/tty explicitamente, você provavelmente pode fazer ...

printf %s\n 'call  sip:[email protected]' | cat - /dev/tty | 
luit -- twinkle -c

... ou use talvez script ou screen no lugar de luit .

Como o antigo método aparentemente funciona para você, a seguinte função de shell pode torná-lo mais simples de executar na linha de comando. Você deve notar, entretanto, que ambos os métodos nesta resposta são tipos de hacks - eu originalmente escrevi isso e depois deletei depois que a outra resposta foi editada para incluir --call . Eu só a recuperei horas depois quando os comentários sobre o outro indicaram que não estava funcionando e achei que isso ainda poderia ajudar. Se fosse eu, no entanto, tentaria descobrir por que a outra resposta não funciona.

Ainda assim, a função shell:

twinksip() while [ -n "$1" ]
           do    printf 'call sip:%s\n' "$1" |
                 cat - /dev/tty | twinkle -c || return
           shift;done

... que prefixará o prefixo call sip: em todos os seus argumentos e os imprimirá no stdin de twinkle . Ele processará tantos argumentos quantos forem fornecidos, o que, como eu acho, faria muitas chamadas seguidas - começando a próxima quando a última terminar.

Você ligaria do prompt como:

twinksip [email protected]                     
    
por 07.02.2015 / 23:56
4

Você tem apenas algumas maneiras de fazer isso:

twinkle  -c && call  sip:[email protected]

Com esta opção, o segundo comando é executado quando o primeiro termina sem erro. Em outro caso, o segundo nunca é executado.

twinkle  -c ; call  sip:[email protected]

Neste caso, o segundo comando é executado após o primeiro, não importa se o primeiro termina com ou sem erro.

Atualização : acredito que você esteja procurando algo assim:

twinkle -c --immediate --call sip:[email protected]

Na página de manual twinkle :

--call <address>  
Instruct Twinkle to call the address. When Twinkle is already running, this will instruct the running process to call the address. The address may be a full or partial SIP URI. A partial SIP URI will be completed with the information from the user profile.
A subject may be passed by appending ''?subject=<subject>'' to the address.  
Examples: 'twinkle --call 123456 twinkle --call sip:[email protected]?subject=hello'

--immediate
This option can be used in conjunction with '--call' or '--cmd' It indicates the the command or call is to be performed immediately without asking the user for any confirmation.
    
por 07.02.2015 / 23:37