이 쉘 스크립트는 bash에서는 실패하지만 명령은 SSH에서 작동하는 이유는 무엇입니까?

이 쉘 스크립트는 bash에서는 실패하지만 명령은 SSH에서 작동하는 이유는 무엇입니까?

웹사이트와 이를 지원하는 모든 MySQL 데이터베이스를 백업하는 쉘 스크립트를 작성하려고 합니다. 온라인에서 몇 가지 예를 찾았지만 감옥에 갇힌 SSH 세션 내의 bash에서 스크립트를 실행하면 실패합니다. SSH 세션에 직접 명령을 입력하면 제대로 작동합니다.

#!/bin/sh

DB1="first_db"
THEDATE=$(date +"%Y-%m-%d")
THEUSER=user
THEDBPW=password

mysqldump -u $THEDBUSER -p$THEDBPW $DB1 > dbbackup_$DB1_$THEDATE.sql

tar -czf sitebackup_website_$THEDATE.tar /home/website/public_html
gzip sitebackup_website_$THEDATE.tar

스크립트는 웹 서버에 있으므로 테스트 목적으로 서버의 cd디렉터리에 SSH로 접속하여 실행했습니다 bash backup.sh. mysqldump연결되지 않았고 비밀번호를 전달할 수 없는 것 같습니다("비밀번호 사용: 아니요"라는 오류 보고서가 반환되었습니다). "). 그런 다음 tar 명령이 실패하고 /home/website/public_html"해당 파일 또는 디렉터리가 없습니다"라고 계산할 수 없다고 보고합니다. tar그런 다음 이전 오류로 인해 오류 상태로 종료되고 있음을 보고합니다.

내가 여기서 무엇을 놓치고 있는 걸까요?

답변1

서버에 로그인하고 다음을 실행하여 스크립트의 Windows 줄 끝을 확인하세요.

cat -v /path/to/script

줄이 로 끝나면 ^M문제가 됩니다.

다음을 실행하여 끊어진 줄 끝이 있는 파일을 수정할 수 있습니다.

dos2unix /path/to/script

dos2unix가 서버에 없으면 다음과 같이 sed를 사용할 수 있습니다.

sed -i 's/\r$//' /path/to/script

답변2

사용자 이름을 변수에 할당했지만 THEUSER명령 mysqldump에서는 해당 변수를 사용하고 있습니다 THEDBUSER.

답변3

tardir=$PWD ; cd /home/website/public_html && 
    tar -czf "$tardir"/sitebackup_complete-office_"$THEDATE.tar"

그렇지 않으면:

tar -C/home/website/public_html -czf \
    sitebackup_complete-office_"$THEDATE.tar"

일반적으로 많은 사람들은 다음 tars과 같은 경우가 아니면 절대 경로를 사용할 수 없습니다.명확한 지침이 방법.

기본적으로 GNU tar는 입력 또는 출력에서 ​​선행 문자를 제거하고 /구성 요소가 포함된 파일 이름에 대해 불평합니다 ... 이 옵션은 이 동작을 끕니다.

ssh's명령이 명령 패스 및 참조를 기반으로 경로를 사전 확인하는 것은 전적으로 가능합니다 . 이는 경로 이름의 변수 확장과 관련이 있습니다.

답변4

문제에 대한 귀하의 설명을 올바르게 이해했다면 주요 차이점은 다음과 같습니다.교도소SSH 세션 - 감옥에 갇힌 세션에서 실행 중인 프로세스는 감옥 디렉터리(일반적으로 홈 디렉터리) 외부의 콘텐츠를 볼 수 없습니다. 이것이 바로 비감금 세션에 문제가 없는 이유입니다. 당신은 또한 볼 수 있습니다위키피디아 감옥 입구자세한 내용은.

관련 정보