대화형 프롬프트에 응답하여 실행 중인 bash 스크립트 실행

대화형 프롬프트에 응답하여 실행 중인 bash 스크립트 실행

대화형 프롬프트에서 쉘 스크립트를 실행하는 데 몇 가지 문제가 있습니다. 전체 코드가 잘 작동합니다. bash 스크립트를 echo 'hello world' 줄로 바꾸면 문제 없이 잘 작동합니다. 저는 오랫동안 쉘 사용자 경험이 없기 때문에 설명과 함께 답변해 주시면 감사하겠습니다.

따라서 기본적으로 제가 원하는 것은 데이터 백업을 시작하기 위해 다른 스크립트를 실행할 것인지 묻는 대화형 쉘 스크립트를 사용하는 것입니다.

bash 명령을 사용하여 기본 스크립트(bash my_script.sh)를 실행하려고 하는데 다음 오류가 발생합니다.

main_backup_pend.sh: line 17: bash: command not found

17번째 줄은 아래에 보이는 bash 스크립트를 호출하는 곳입니다.

[Yy]* ) echo 'Copying database...'; bash $PATH/backup.database.sh > backup.log.$DATE.database; break;; 

#!/bin/bash

PATH=/data/sjamal/4.Backups
DATE=170317

#[COPY]Mysqldump, making database copy storing it locally

    while true; do
    read -p "Do you wish make a database copy?" yn
    case $yn in
        [Yy]* ) echo 'Copying database...'; bash $PATH/backup.database.sh > backup.log.$DATE.database; break;;
        [Nn]* ) break;;
        * ) echo "Please answer yes or no.";;
    esac
done

#[BACKUP]Performing back up of Repository to HPC

    while true; do
    read -p "Do you wish to back up Repository to HPC?" yn
    case $yn in
        [Yy]* ) echo 'backing up Repository...'; bash $PATH/backup.Repository.sh > backup.log.$DATE.repository; break;;
        [Nn]* ) break;;
        * ) echo "Please answer yes or no.";;
    esac
done

답변1

스크립트의 첫 번째 줄은 모든 것을 깨뜨립니다.

PATH=/data/sjamal/4.Backups

이는 스크립트의 모든 명령( bash인터프리터 자체 포함)이 이 디렉토리에만 있음을 알려줍니다. (이것이 PATH예약된 변수라는 것을 몰랐을 수도 있습니다 . echo $PATH가끔 일반적인 검색 명령에 대한 디렉터리 목록을 살펴보세요.)

PATH스크립트 전체에서 사용을 다른 것으로 변경하면 backup_dir예상대로 작동할 가능성이 더 높아질 수 있습니다.


"$double_quotes"추가 팁: 변수를 사용할 때 변수 (및 사용되는 경로)를 넣으세요 . 따라서 .backup.log.$DATE.repository"backup.log.$DATE.repository"

관련 정보