scp가 원격 호스트에서 로컬 파일을 반환하는 스크립트가 있습니다. 파일 이름에 공백이 포함되는 경우가 있습니다. scp는 파일 이름에 공백이 있는 것을 좋아하지 않습니다. 어떤 이유로 공백을 처리하려는 시도가 올바른 scp 경로를 생성하지 못했습니다.
암호:
PATH=/var/root/Documents/MyFile OG-v1.2.3.pkg
scp $PATH [email protected]:/Users/Me/Desktop
밝혀지다
Cannot find directory: var/root/Documents/MyFile
Cannot find directory: OG-v1.2.3.pkg
PATH를 따옴표로 묶으면 "$PATH"
동일한 오류가 발생합니다.
내가 아는 한 다음과 같이 해야 하지만 이스케이프된 공백으로 공백을 바꾸는 것도 작동하지 않습니다.
ESC_PATH=${PATH/' '/'\ '}
이스케이프 경로를 인쇄하면 편집이 작동하는 것으로 표시됩니다.
echo $ESC_PATH
> /var/root/Documents/MyFile\ OG-v1.2.3.pkg
답변1
선언과 사용법을 인용해야 합니다.
path="/var/root/Documents/MyFile OG-v1.2.3.pkg"
scp "$path" [email protected]:/Users/Me/Desktop
첫 번째 부분을 인용하지 않으면 $path
첫 번째 부분만 포함됩니다. 두 번째 부분을 인용하지 않으면 scp
공백으로 구분된 각 부분이 매개변수로 처리됩니다.
( 중요한 예약 변수이고 일반 용도로는 사용할 수 없기 때문에 $PATH
로 변경했습니다 .)$path
$PATH
답변2
나는 ssh를 사용하여 매우 유사한 접근 방식을 시도하고 이를 통해 명령줄을 전달합니다. 예를 들어
ssh <somehost> ls -l "$PATH"
단순히 "$PATH"를 정의하는 것만으로는 효과가 없다는 것을 알았습니다. 여전히 오류가 발생했습니다. 하지만 내가 달리면
ssh <somehost> ls -l "\"$PATH"\"
이것은 작동합니다. 비결은 ""의 추가 세트가 셸에서 ssh 명령으로 전달되는지 확인하는 것입니다.