私は、ポート 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
難しく考えすぎだよ。
実行したいコマンドを、引用符で囲んだりecho
ing したりせずに、そこに記述します。変数を に置き換えます${x}
。変数は二重引用符で囲まれた文字列に置き換えられ、 は変数がではなく{}
として解釈されるようにするためのものです。x
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
答え2
実際には、コマンドを実行するのではなく、エコーしています。
Bash スクリプトはコマンドとして行ごとに実行されます。つまり、次の行:
echo 'Running Script'
は、シェルで入力するのとまったく同じですecho 'Running Script'
。自分で試してみてください。 が出力されますRunning Script
。 結論:echo
は、すべての引数をターミナルに出力します。
そうは言っても、この行:
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
行全体が実行され、引数が出力された状態でターミナルに出力されます。
まだわかりにくいので、少し単純化して、コマンドを としましょうecho 'echo -n -e "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 はコマンドを実行する前に変数を置き換えるだけなので、変数名を入力するとその内容が実行されます。