첫 번째 장애물에서 막혔어요!
Bash 스크립트에서 여러 명령을 실행하고 싶습니다. 먼저 다음과 같은 일부 디렉토리를 rsync하십시오.
rsync -e ssh -az [email protected]:/home /location/of/local/folder
그런 다음 파일을 압축하고 다음과 같이 다른 곳에 복사하십시오.
cd /location/of/local/folder
tar zcf /var/backups/home-`date +%Y%m%d`.tar.gz home
이것이 의미가 있기를 바랍니다.
문제는 분명히 디렉토리가 tarred되기 전에 rsync가 완료되기를 원한다는 것입니다. 그렇다면 tar
명령을 실행하기 전에 rsync가 완료되었는지 확인하는 데 사용할 수 있는 코드가 있습니까 ?
예를 들어(의사 코드)
rsync
while(is syncing){
sleep 10
}
tar
아니면 .sh
첫 번째 줄이 완료되고 종료된 후에만 내 스크립트가 다음 줄을 실행합니까?
답변1
쉘 스크립트의 명령은 순차적으로 실행됩니다. 첫 번째 명령이 완료되면 다음 명령은 rsync
완료될 때까지 실행되지 않습니다.rsync
확인하려는 것은 rsync
다음 명령으로 이동하기 전에 성공적으로 완료된다는 것입니다.
이것은 가장 우아한 솔루션은 아니지만 구현하기가 가장 쉽습니다.
rsync -e ssh -az [email protected]:/home /location/of/local/folder &&\
tar zcf /var/backups/home-`date +%Y%m%d`.tar.gz /location/of/local/folder
이는 종료 상태가 인 경우 에만 rsync
작동한다는 점을 기억하세요 0
. 다른 종료 상태와 명령 2는 실행되지 않습니다.
AND 및 OR 목록은 &&로 구분된 여러 파이프 중 하나의 시퀀스입니다. 및 || AND 및 OR 목록이 실행됩니다. 연관성을 남겼습니다. AND 목록의 형식은 다음과 같습니다. 명령 1 && 명령 2 command2는 command1이 종료 상태 0을 반환하는 경우에만 실행됩니다.
rsync
종료 값에 따라 다른 작업을 수행 하면 스크립트에 더 많은 지능을 추가할 수 있습니다.
#!/bin/bash
PATH=/bin:/usr/bin:/sbin:/usr/sbin
rsync -e ssh -az [email protected]:/home /location/of/local/folder
if [ $? != "0" ]
then
echo "There was a problem"
else
tar zcf /var/backups/home-`date +%Y%m%d`.tar.gz /location/of/local/folder
fi