1회 반복 후에 스크립트가 종료되기를 원합니다. 계속 반복되는 것처럼 보였고 CTR C로 종료해야 했습니다. 문제를 해결하는 방법을 모르겠습니다.
[root@vPAS-Calipers lattice_private]# cat stat.sh
#!/bin/bash
DATE=`/bin/date +"%Y%m%d%H%M"`
#140 Caliper VM- Volte
sleep 2
./linux_machine_cli_firing.exp 172.9.9.14 "cd /root/cal/Product/run" "./cli -p 4001 " "show call-mode statistics"
sleep 2
./linux_machine_cli_firing.exp 172.9.9.14 "cd /root/cal/Product/run" "./cli -p 4002 " "show call-mode statistics"
sleep 2
./linux_machine_cli_firing.exp 172.9.9.14 "cd /root/cal/Product/run" "./cli -p 4003 " "show call-mode statistics"
sleep 2
./stat.sh > stat-tps_${DATE}.txt
결과
stat-tps_202101271452.txt
stat-tps_202101271453.txt
stat-tps_202101271455.txt
답변1
이는 스크립트의 마지막 줄 때문입니다.
./stat.sh > stat-tps_${DATE}.txt
그러면 스크립트가 실행됩니다.다시출력이 새 파일로 리디렉션됩니다. (스크립트가 다시 실행되면 다시 실행하여 완료됩니다.)
./linux_machine_cli_firing.exp
귀하의 의도는 명령 출력을 로그 파일로 리디렉션 하는 것이라고 가정합니까 ? 그렇다면 stderr에 로그인할 수도 있습니다. 각 명령에 대해 개별적으로 리디렉션할 수 있습니다.
#!/bin/bash
date=$(/bin/date +"%Y%m%d%H%M")
#140 Caliper VM- Volte
sleep 2
./linux_machine_cli_firing.exp 172.9.9.14 "cd /root/cal/Product/run" "./cli -p 4001 " "show call-mode statistics" >"stat-tps_${date}.txt" 2>&1
sleep 2
./linux_machine_cli_firing.exp 172.9.9.14 "cd /root/cal/Product/run" "./cli -p 4002 " "show call-mode statistics" >>"stat-tps_${date}.txt" 2>&1
sleep 2
./linux_machine_cli_firing.exp 172.9.9.14 "cd /root/cal/Product/run" "./cli -p 4003 " "show call-mode statistics" >>"stat-tps_${date}.txt" 2>&1
sleep 2
첫 번째 파일은 새 파일을 만드는 데 사용되고 >
나머지는 >>
파일을 덮어쓰는 것이 아니라 파일에 추가하는 데 사용됩니다. stderr을 stdout과 동일한 위치로 보내 2>&1
므로 오류를 포착하지 않으려면 무시하십시오.
또한 대신 소문자 변수를 사용했습니다 date
. 특별한 의미를 갖는 모두 대문자로 된 변수 이름이 많이 있으므로 충돌을 피하기 위해 소문자 또는 대소문자 혼합 이름을 사용하는 것이 가장 안전합니다. 변수 참조가 포함되어 있기 때문에 파일 이름을 큰따옴표로 묶었습니다(여기서는 실제로 필요하지 않지만 스크립팅 위생이 좋습니다). 마지막으로 $()
날짜 명령의 출력을 캡처하기 위해 백틱 사용에서 클리너 사용으로 변경했습니다 .
또 다른 옵션은 스크립트가 실행되는 동안 모든 스크립트 출력을 로그 파일로 리디렉션하는 것입니다. 이 작업을 수행하기 위해 이 명령을 사용하여 스크립트를 다시 실행할 필요는 없습니다 exec
. 꼭 하셔야 한다는 점 참고하세요앞으로리디렉션하려는 출력의 명령을 실행합니다.
#!/bin/bash
date=$(/bin/date +"%Y%m%d%H%M")
exec >"stat-tps_${date}.txt" 2>&1 # Redirect output from this point on
#140 Caliper VM- Volte
sleep 2
./linux_machine_cli_firing.exp 172.9.9.14 "cd /root/cal/Product/run" "./cli -p 4001 " "show call-mode statistics"
sleep 2
...
2>&1
일반 출력에서 오류가 포착되는 것을 원하지 않으면 다시 무시하십시오.