경로에서“`”(악센트 / 백틱)을 어떻게 벗어날 수 있습니까?


13

자주 사용하지 않는 파일과 폴더 앞에 "액센트 그레이프"문자 (비 시프트 물결표, 백 틱 또는 일반 낡은 악센트, 무엇을 ..) 를 붙이는 경향이 있습니다 . 알파벳순으로 정렬하고 상단에 몇 가지 항목을 표시하도록 선택할 수 있습니다. 그것은 내가 CLI 또는 SSH / SCP를 통해 이러한 파일에 액세스 할 갈 때를 제외하고 잘 작동합니다.

이스케이프 해제 된 파일을 호출하여 명령을 실행하려고하면 ↝ 대화식 세션으로 이동합니다. 예를 들어 ↯

# scp -r dns.local:/`Downloads/CrazyRussianCars/ ~/
↩
>

그러나 논리적 인 해결책을 시도한다면

# scp -r dns.local:/\`Downloads/CrazyRussianCars/ ~/
↩
bash: -c: line 0: unexpected EOF while looking for matching ``'
bash: -c: line 1: syntax error: unexpected end of file

나는 "새로운"규칙과 같은 구문을 사용하는 것입니다 알고 export NOW=$(date)VS export NOW= date`를`(사실, 나는 시간도의 곰이 있었다 작성 ... SE MD 구문 후자를) 그러나 이것은 관련이 ENV또는 스크립트. ..

참고 : 맥 OS X 환경,하지만, GUI를 매일 매일이 문자를 다루는 문제가 없었다, 그리고 결코 말했다 일반적으로, 터미널, 애플에 구문 문제가있는거야 경우 하지 ... GUI에 동작을 비활성화 꽤 좋은 작업 확실하지이 버그, 또는 경로를 다루는 기술이 경우 단순히 모호 ..하지만 지금까지, 만약 내가 해제 할 수을 찾을 수 있었다 방법 "탈출" ?


숫자 1과 같이 이스케이프 할 필요가없는 문자를 사용하는 것이 어떻습니까?
JamesRyan

백틱은 시각적으로 덜 파괴적이며 (나를 위해) 정렬 구분 기호로 다시 사용할 때 고유 한 의미 론적 수하물이 적습니다.
mralexgray

답변:


10

Jed Daniels가 언급 한대로 3 개의 백 슬래시를 사용하거나 작은 따옴표로 묶고 (')단일 백 슬래시를 사용할 수 있습니다 .

두 가지 예는 다음과 같습니다.

$ touch dir/'`rik' 
$ ls -l dir
total 1865376
-rw-r--r--  1 rik  staff          0 Jul  1 09:51 `rik 
$ scp localhost:dir/\\\`rik ./ `rik         
100%    0     0.0KB/s   00:00     
$ scp localhost:dir/'\`rik' ./ `rik     
100%    0     0.0KB/s   00:00     
$

대박. 두 가지 방법이 있기 때문에이 답변을 선택할 것입니다. 슬래시 하나만 사용하거나이 슬래시 방지, 슬래시 없음 및 문제가있는 파일 또는 디렉토리 주변의 작은 따옴표 기술에 대해이 기술을 로컬로 사용할 수도 있습니다. 감사합니다!
mralexgray

5

세 개의 백 슬래시가이를 수행해야합니다.

jed@jed-osx:~$ ls -la \`foo
ls: `foo: No such file or directory
jed@jed-osx:~$ scp desk:\\\`foo .
`foo                                            100%    0     0.0KB/s   00:00    
jed@jed-osx:~$ ls -la \`foo
-rw-r--r--  1 jed  staff  0 Jul  1 09:45 `foo
jed@jed-osx:~$ rm \`foo

첫 번째 백 슬래시는 백틱을 이스케이프 처리하여 다른쪽으로 전송되지만 다른 쪽은 백틱이 쌍으로 나타날 것으로 예상하므로 오류가 발생합니다. 두 번째 백 슬래시는 첫 번째 백 슬래시를 이스케이프 한 후 이스케이프 된 백 슬래시를 다른쪽으로 보낼 수 있도록 추가로 두 개의 백 슬래시가 필요합니다.

편집 : Rik이 언급했듯이 작은 따옴표로도 할 수 있습니다. 변수로 사용할 수 없기 때문에 이것을 생각하지 못했습니다 (작은 따옴표로 묶었을 때 로컬 시스템에서 확장되지 않습니다).


3

일반적으로 명령 행은 쉘에서 한 번 해석됩니다. 그러나 역사적 이유로 scp는 파일 이름을 원격 셸에도 전달하므로 파일 이름은 셸에서 두 번 해석됩니다 . 이것은 또한 scp remote:'/path/prefix*' /path/local/원격 쉘이 확장되는 것과 같이 작동 하게 만드는 것 /path/prefix*입니다.

두 번째 확장을 피하는 가장 쉬운 방법은 원격 쉘을 사용하지 않는 sftp를 사용하는 것입니다. 여전히 glob 확장을 수행하지만 stdin에 명령을 제공 할 수 있으므로 로컬 셸 확장을 완전히 피할 수 있습니다.

그 외에는 @Jed Daniels 및 @Rik Schneider에서 제공 한 것을 포함하여 일반적인 쉘 인용 메커니즘을 사용할 수 있지만 실제로 무슨 일이 일어나고 있는지 설명하고 sftp를 언급하고 싶었습니다.

(예를 위해 당신은 당신의 SCP 파일 이름에 쉘 기능의 모든 종류를 사용할 수 있습니다 scp server:\$HOME/file dest사용합니다 원격 의 쉘의 생각을 $HOME당신이 밖으로했다 경우 반면에 \, 그것은 당신의 사용하십시오 현지 쉘을.).

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