![bash 스크립트가 내 변수 이름 중 하나의 이름을 딴 파일을 생성하는 이유는 무엇입니까?](https://linux55.com/image/123773/bash%20%EC%8A%A4%ED%81%AC%EB%A6%BD%ED%8A%B8%EA%B0%80%20%EB%82%B4%20%EB%B3%80%EC%88%98%20%EC%9D%B4%EB%A6%84%20%EC%A4%91%20%ED%95%98%EB%82%98%EC%9D%98%20%EC%9D%B4%EB%A6%84%EC%9D%84%20%EB%94%B4%20%ED%8C%8C%EC%9D%BC%EC%9D%84%20%EC%83%9D%EC%84%B1%ED%95%98%EB%8A%94%20%EC%9D%B4%EC%9C%A0%EB%8A%94%20%EB%AC%B4%EC%97%87%EC%9E%85%EB%8B%88%EA%B9%8C%3F.png)
나는 이 bash 스크립트를 사용하여 내 서버의 3개 백업을 유지하고 있습니다. 어떤 이유로 내 변수 중 하나의 이름으로 빈 파일을 무작위로 생성합니다. 선택한 변수 이름은 무작위로 나타나며 실행될 때마다 파일을 생성하지 않습니다.
Ubuntu Server 16.04LTS를 실행 중입니다.
스크립트는 예상대로 완벽하게 작동합니다. 나는 bash가 때때로 그 파일을 생성하는 이유를 알고 싶습니다.
참고: Samba 주소, CIFS 자격 증명 위치 등 일부 민감한 정보는 생략했습니다. 이는 의도적인 것이며 실제 스크립트에서는 정확합니다.
bash backup.bash
bash를 사용하여 명시적으로 명령을 사용하여 cron 작업에서 이 스크립트를 실행합니다.
#!/bin/bash
## The number of backups that we want to keep
MAX_BACKUPS=3
## The directory to store the backups
BACKUP_DIR="OMITTED"
## The address of the Samba Share
REMOTE_ADDR="OMITTED"
## What we want to name the backup
BACKUP_NAME="$(date +"%m_%d_%Y")_backup.tar.gz"
## Mount the Samba Share to the backup directory
mount -t cifs -o credentials=OMITTED,noperm $REMOTE_ADDR $BACKUP_DIR
## Make todays backup
tar -cpzvf $BACKUP_DIR/$BACKUP_NAME --exclude-from=/backup_scripts/backup.exclude /
## The number of backups that we now have
COUNT="$(find $BACKUP_DIR -maxdepth 1 -type f -name '*_backup.tar.gz' | wc -l )"
## If we have more backups than MAX_BACKUPS
if ((COUNT > MAX_BACKUPS)); then
## Delete the oldest file (DETERMINED BY MODIFICATION DATE)
cd $BACKUP_DIR
rm "$(ls -t | tail -1)"
fi
# Unmount the Samba Share for safety
umount $BACKUP_DIR
답변1
편집: @StéphaneChazelas가 지적했듯이 문제는 스크립트가 호출되지 않고 구성이 작동하지 않는다는 것일 수 bash
있습니다 (( ))
. bash
쉘 에서 시도 하거나 사용하십시오.bash my_script.sh
그리고 이것이 끔찍하게 실패할 가능성도 있습니다 rm
. 읽어주세요이 FAQ.