일부 데이터를 포트 30000에 지속적으로 브로드캐스트하는 스크립트를 작성 중이므로 Python UDP 수신기가 데이터를 가져와 테이블에 삽입할 수 있습니다. 테이블에서 해당 정보를 그려 웹 페이지에 표시할 수 있습니다.
그래서 나는 처형하고 싶다.
echo -n -e "\x00\x00\x0A\x00 1 012601234512345\x00" | nc -w1 -u localhost 3000
while 루프의 bash 스크립트에서.
이것은 지금까지 내가 가지고 있는 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
넣지 않고 거기에 넣기만 하면 됩니다. 변수를 ${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
변수에 할당하고, 두 번째 줄은 이를 출력하고, 세 번째 줄은 실행합니다. 처음에는 혼란스러워 보이지만 매우 간단합니다. bash는 명령을 실행하기 전에 변수를 대체하므로 변수 이름을 입력하면 해당 내용이 실행됩니다.