안녕하세요. 실행하기 전에 3개의 파일을 검사하는 스크립트를 만들려고 합니다. 실행 중인지 아닌지. 내 코드에 문제가 있나요?
#!/bin/bash
if [[ ! $(pgrep -f a1.php) ]]; //check if any pid number returned if yes close and exit this shell script
exit 1
if [[ ! $(pgrep -f a2.php) ]]; //check if any pid number returned if yes close and exit this shell script
exit 1
if [[ ! $(pgrep -f a3.txt) ]]; //check if any pid number returned if yes close and exit this shell script
exit 1
else
php -f a.php; php -f b.php; sh -e a3.txt //3 files is not running now we run these process one by one
fi
답변1
Bash에서 올바른 형식을 사용 하지 않고 있습니다 . 특히 및 가
if
누락되었습니다 .then
fi
$()
서브쉘은 당신이 생각하는 대로 작동하지 않을 수도 있습니다. 종료 코드(일반적으로 테스트하는 코드)가 아닌 내부 명령의 표준 출력을 반환합니다. 플래그를$(pgrep -c -f a1.php) -gt 0
사용하여-c
일치하는 프로세스 수를 반환하거나 종료pgrep -f a1.php > /dev/null
코드를 사용하는 것이 더 좋습니다.[[ ! $(pgrep -f a1.php) ]]
이 경우 작동할 수 있지만[[ $(pgrep -f a1.php) ]]
여러 프로세스가 일치하면 실패하므로 취약합니다.
노력하다,
if [[ $(pgrep -c -f a1.php) -gt 0 ]]; then
exit 1
fi
if [[ $(pgrep -c -f a2.php) -gt 0 ]]; then
exit 1
fi
if [[ $(pgrep -c -f a3.txt) -gt 0 ]]; then
exit 1
fi
php -f a.php; php -f b.php; sh -e a3.txt
아니면 다른 옵션
pgrep -f a1.php > /dev/null && exit 1
pgrep -f a2.php > /dev/null && exit 1
pgrep -f a3.php > /dev/null && exit 1
php -f a.php; php -f b.php; sh -e a3.txt
바라보다http://tldp.org/LDP/Bash-Beginners-Guide/html/sect_07_01.htmlif 문에 대한 추가 정보.