SSH를 통해 스크립트를 실행하고 호스트 내의 일부 var/comand를 평가합니다.

SSH를 통해 스크립트를 실행하고 호스트 내의 일부 var/comand를 평가합니다.

서버 간에 일부 데이터를 마이그레이션하는 스크립트를 만들고 있습니다.

내 두통:

(...)
ssh -t -i ${KEY} ${USER}@${HOST} "cd /home/${ACCOUNT}/var/${DOMAIN}/ && tar cf - mail/ -P | pv -s $(du -sb mail/ | awk '{print $1}') | gzip > mail.tar.gz"

명령은 "메일 폴더를 찾을 수 없습니다."와 같은 내용을 반환하며 그 이유를 알 것 같습니다.

이 명령은 SSH 연결 전에 평가되며 pv -s $(du -sb mail/ | awk '{print $1}')메일 폴더는 첫 번째 서버에 존재하지 않습니다. 그러나 현재 바이트 크기를 하드코딩하면 스크립트가 작동합니다.

이 상황을 어떻게 우회할 수 있나요?

를 사용하겠지만 '이미 을 사용하고 '{print $1}'비슷한 것에 맞게 다른 변수를 만들어 보았지만 'pv -s $(du -sb mail/ | awk \'{print $1}\') '여전히 운이 좋지 않았습니다. 일반 따옴표와 큰 따옴표를 사용하여 많은 가능성을 시도했습니다.

추신: "영어"로 인해 죄송합니다.

주제에서 벗어남: 누군가 나에게 변수 선언, 표시 및 평가의 모든 가능성을 설명/보여주는 좋은 기사(또는 검색할 주요 키워드)를 알려준다면 기쁠 것입니다. 올바른 용어를 모르겠습니다. ${var} 및 $var와 마찬가지로 "or를 사용할 때 echo는 무엇을 하고 ', 중복된 따옴표, 큰 따옴표, 연결 등을 이스케이프하는 방법은 무엇입니까?


전체 스크립트 예:

clear
printf "\n\n"
echo "********************************  INTERWORX --> CPANEL  *************************************"
printf "\n\n"

USER=root
HOST=xxx.xxx.xxx.xxx
PORT=xxxx
KEY=/var/somewhere
# ----------------
ACCOUNT=myaccount
DOMAIN=example.com

printf " ► ---------------------- [ ${HOST} ]\n"
printf " ►►---------------------- \n"

ssh -t -i ${KEY} ${USER}@${HOST} "cd /home/${ACCOUNT}/var/${DOMAIN}/ && tar cf - mail/ -P | pv -s \$(du -sb mail/ | awk '{print $1}')  | gzip > mail.tar.gz"

printf "\n ►►► ------------ [ mail.tar.gz ]\n\n"

scp -i ${KEY} ${USER}@${HOST}:/home/${ACCOUNT}/var/${DOMAIN}/mail.tar.gz .
                          ( ... )

답변1

귀하의 의견에서 디버깅 옵션을 언급하셨기 때문에 다음과 같은 답변이 필요하다고 생각합니다.

set -x시퀀스의 첫 번째 명령 으로 사용됨

ssh -t -i ${KEY} ${USER}@${HOST} "set -x ; cd /home/${ACCO ....."

이는 귀하의 사례에서 실패 지점을 명확하게 보여줍니다.

도망칠 수 없어 $1

....
    ++ du -sb mail/
    + pv -s 12314 mail/   # <<< awk printed all the line instead of expected just 1st column with size and that ruined the command
    pv: mail/: read failed: Is a directory
...

그리고 탈출

....
 ++ du -sb mail/
 + pv -s 12314    # <<< pv gets expected number
      10kiB 0:00:00 [ 184MiB/s] [=======
....

관련 정보