Como executar um comando dentro de um script bash?

0

Estou escrevendo um script que transmitirá continuamente alguns dados para a porta 30000, para que um ouvinte do python udp possa obter os dados e inseri-los em uma tabela, a partir da qual posso desenhar essas informações e exibi-las em uma página da Web.

Então, eu quero executar

echo -n -e "\x00\x00\x0A\x00 1 012601234512345\x00" | nc -w1 -u localhost 3000

no script bash em um loop while.

Este é o script bash que tenho até agora:

#!/bin/bash
echo 'Running Script'   
a=0  
x=1
while [ $a -le 1 ]
do
  echo 'echo -n -e "\x00\x00\x0A\x00        1      012601234'$x'12345\x00" | nc -w1 -u localhost 30000'
  sleep 5 
  let x=$(($x + 1))
done

A variável x está incrementando cada vez ao longo do loop, então os dados são alterados a cada vez.

No momento, estou pensando que, em vez de produzir isso como um comando para o terminal, ele está saindo como uma string. Eu sou muito novo para bater, e qualquer ajuda seria muito apreciada.

    
por Ed Prince 12.08.2014 / 12:31

2 respostas

3

Você está pensando demais sobre isso.

Basta colocar o comando que você quer executar lá, sem citá-lo ou echo it. Substitua a variável por ${x} . As variáveis serão substituídas em strings com aspas duplas e o {} estará lá para garantir que sua variável seja interpretada como x e não x12345 .

#!/bin/bash
echo 'Running Script'   
a=0  
x=1
while [ $a -le 1 ]
do
  echo -n -e "\x00\x00\x0A\x00        1      012601234${x}12345\x00" | nc -w1 -u localhost 30000
  sleep 5 
  let x=$(($x + 1))
done
    
por 12.08.2014 / 12:34
4

Você está realmente ecoando o comando em vez de executá-lo.

Os scripts bash são executados um por linha como comandos. Então esta linha:

echo 'Running Script'

É um equivalente exato da digitação de echo 'Running Script' no shell. Tente você mesmo: ele produzirá Running Script . Conclusão: echo enviará todos os seus argumentos para o terminal.

Assimsendo,estalinha:

echo'echo-n-e"\x00\x00\x0A\x00        1      012601234'$x'12345\x00" | nc -w1 -u localhost 30000'

irá gerar echo -n -e "\x00\x00\x0A\x00 1 012601234'$x'12345\x00" | nc -w1 -u localhost 30000 para o terminal. Toda a linha é executada, o argumento é gerado.

Aindaparececonfuso,entãovamossimplificarumpouco:deixenossocomandoserecho'echo-n-e"blah"' .

Vocêdisseparaenviarocomando,entãoeleemitiuocomando.Solteoechoexternoparaexecutá-lo.Comoo slhck sugeriu , você pode usar a variável colocando chaves:

echo -n -e "\x00\x00\x0A\x00        1      012601234${x}12345\x00" | nc -w1 -u localhost 30000

Ele executará o comando, mas não o emitirá. Se você deseja enviar o comando, tente isto:

cmd="echo -n -e \"\x00\x00\x0A\x00        1      012601234${x}12345\x00\" | nc -w1 -u localhost 30000"
echo $cmd
$cmd

A primeira linha atribui seu comando a uma variável cmd , a segunda linha a envia e a terceira a executa. Parece confuso no início, mas é bem simples: o bash apenas substituirá as variáveis antes de executar um comando, então digitar o nome da variável fará com que seu conteúdo seja executado.

    
por 12.08.2014 / 12:48

Tags