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 }'이스케이프를 "{ print \$5 }"변경 해야 합니다 .$$5

관련 정보