bash スクリプト内でコマンドを実行するにはどうすればいいですか?

bash スクリプト内でコマンドを実行するにはどうすればいいですか?

私は、ポート 30000 にデータを継続的にブロードキャストするスクリプトを作成しています。これにより、Python UDP リスナーがデータを取得してテーブルに挿入し、そのテーブルから情報を抽出して Web ページに表示できるようになります。

だから、私は実行したい

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

bash スクリプトの while ループ内。

これは私がこれまでに作成した bash スクリプトです。

#!/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

x 変数はループ全体にわたって毎回増加するため、データは毎回変化します。

現時点では、これをコマンドとしてターミナルに出力するのではなく、文字列として出力しているだけだと思います。私は bash の初心者なので、どんな助けでも大歓迎です。

答え1

難しく考えすぎだよ。

実行したいコマンドを、引用符で囲んだりechoing したりせずに、そこに記述します。変数を に置き換えます${x}。変数は二重引用符で囲まれた文字列に置き換えられ、 は変数がではなく{}として解釈されるようにするためのものです。xx12345

#!/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

答え2

実際には、コマンドを実行するのではなく、エコーしています。

Bash スクリプトはコマンドとして行ごとに実行されます。つまり、次の行:

echo 'Running Script'

は、シェルで入力するのとまったく同じですecho 'Running Script'。自分で試してみてください。 が出力されますRunning Script。 結論:echoは、すべての引数をターミナルに出力します。

上記のコマンドを実行したbashのスクリーンショット

そうは言っても、この行:

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

echo -n -e "\x00\x00\x0A\x00 1 012601234'$x'12345\x00" | nc -w1 -u localhost 30000行全体が実行され、引数が出力された状態でターミナルに出力されます。

bashで実行される2番目のコマンド

まだわかりにくいので、少し単純化して、コマンドを としましょうecho 'echo -n -e "blah"'

bashで実行されたblahコマンド

echoコマンドを出力するように指示したので、コマンドが出力されました。代わりに外側を削除して実行します。slhckが提案変数を中括弧で囲むことで、変数を利用できます。

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

コマンドは実行されますが、出力はされません。コマンドを出力したい場合は、次を試してください。

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

最初の行はコマンドをcmd変数に割り当て、2 行目はそれを出力し、3 行目はそれを実行します。最初は混乱しているように見えますが、非常に単純です。bash はコマンドを実行する前に変数を置き換えるだけなので、変数名を入力するとその内容が実行されます。

関連情報