SSH 명령 내부에 할당된 변수가 적절한 값을 반환하지 않습니다.

SSH 명령 내부에 할당된 변수가 적절한 값을 반환하지 않습니다.

ssh내 스크립트 부분 에서 아래 명령을 실행하고 있습니다 . 이 명령은 옵션에서 파일 크기를 잘라 ls변수에 저장하기 위한 것입니다. 그런 다음 변수를 인쇄합니다.

echo "Enter srouce file";
read src_file;
src_size =`ls -latr $src_file | awk  '{ print $5 }' `;
echo "The source file size is $src_size ";

명령줄에서 실행하면 제대로 작동합니다.

다음을 통해 스크립트 내에서 동일한 명령을 시도할 때 ssh:

ssh user@server "echo "enterfile";read src_file;echo "enter path ";read path;cd $path;src_size=`ls -latr $src_file | awk  '{ print $5 }' ` ; echo The source file size is $src_size;"

이것은 실패합니다. 일부 로컬 임시 값을 저장하고 올바른 파일 크기 대신 동일한 값을 반환합니다.

답변1

인용 문제로 인해 명령이 엉망이 되는 것을 방지하려면 스크립트를 사용하세요.

더 깨끗하고, 관리하기 쉽고, 보기도 더 좋아졌습니다 :)!

예를 들어 다음과 같이 하세요.

echo "Enter source file"
read src_file
ssh user@server 'bash -s' < /path/to/local_script.sh "$src_file"

내용 local_script.sh:

#!/bin/bash
src_file="$1"
src_size =`ls -latr $src_file | awk  '{ print $5 }'`
echo "The source file size is $src_size "

경로를 추가하는 것을 잊지 마세요 local_script.sh:)

답변2

일부 이스케이프를 수행하지 않고는 다른 큰따옴표 안에 큰따옴표를 중첩할 수 없습니다. 큰따옴표 안에 역따옴표를 넣으면 원격 장치가 아닌 로컬 컴퓨터에서 평가됩니다.

이와 유사한 것이 달성하려는 작업을 수행해야 합니다.

ssh user@server 'echo "Enter file: "; read src_file; echo "Enter path: "; read path; cd $path; src_size=`ls -latr $src_file | awk  "{ print \$5 }"`; echo "The source file size is $src_size;"'

이제 작은 따옴표가 아닌 큰 따옴표 안에 있고 셸에서 해석되는 것을 원하지 않기 때문에 를 이스케이프하여 '{ print $5 }'to 로 변경해야 했습니다 ."{ print \$5 }"$$5

관련 정보