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