파일 이름에 공백이있는 스크립트 문제


11

원격 호스트에서 로컬로 파일을 scp하는 스크립트가 있습니다. 때로는 파일 이름에 공백이 포함되어 있습니다. scp는 파일 이름에서 공백을 좋아하지 않습니다. 어떤 이유로 공간을 처리하려는 시도가 올바른 scp 경로를 얻지 못했습니다.

암호:

PATH=/var/root/Documents/MyFile OG-v1.2.3.pkg
scp $PATH Me@10.1.10.33:/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

4
$PATH터미널에는 변수가 필요하므로 자신의 변수 에는 사용하지 마십시오 .
Bernhard

답변:


19

선언과 사용법을 모두 인용해야합니다.

path="/var/root/Documents/MyFile OG-v1.2.3.pkg"
scp "$path" Me@10.1.10.33:/Users/Me/Desktop

첫 번째를 인용하지 않으면 $path첫 번째 부분 만 포함됩니다. 두 번째를 인용하지 않으면 scp공백으로 구분 된 각 부분을 인수로 취급합니다.

(I는 변경했습니다 $PATH$path있기 때문에 $PATH중요한 예약 변수이며 일반적인 목적으로 사용하지 않아야합니다.)


1
완전한! 감사합니다. @Matteo입니다. 렌치를 넣는 접두사 공간 도 있음 을 알 수 있습니다.
Miles Alden

1

ssh와 매우 비슷한 것을 시도하고 그것을 통해 명령 줄을 전달했습니다. 예 :

ssh <somehost> ls -l "$PATH"

나는 단순히 "$ PATH"를 정의하는 것이 트릭을 수행하지 않는다는 것을 알았습니다. 여전히 오류가 발생했습니다. 그러나 내가 달리면

ssh <somehost> ls -l "\"$PATH"\"

이것은 효과가 있었다. 트릭은 추가 ""세트가 쉘에서 ssh 명령으로 전달되도록하는 것입니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.