저번에 직장에서 내가 하려고 했던 일이
scp remotehost:~/*.txt .
에 대한 오류를 받았습니다 *
.*.txt file not found
죄송합니다. 근무 중이 아니어서 정확한 오류를 잊어버렸습니다.
내 워크스테이션에서는 4.3을 실행하고 있습니다 zsh
. 원격 호스트의 기본 셸이며 이전 버전 bash
입니다 zsh
(4.2그리고4.3) 이 점에 대해서요. 그런 다음 워크스테이션에서 bash로 전환을 시도하고 똑같은 명령을 실행했습니다. 이번에는 효과가 있었습니다. 이 상황의 근본 원인은 무엇입니까? 이 두 시스템 사이에 와일드카드 또는 와일드카드가 있습니까(bash로 전환하지 않고)?
답변1
zsh는 대부분의 다른 쉘과 약간 다르게 동작합니다. Bash와 같은 다른 쉘은 와일드카드를 확장하려고 합니다. 어떤 것으로도 확장할 수 없는 경우 리터럴 문자열(와일드카드 포함)을 애플리케이션에 전달합니다. 그러나 zsh는 그렇게 하지 않습니다(글쎄, 그것을 할지 말지 선택의 여지가 있습니다). zsh는 오류를 인쇄하고 명령을 실행하지 않습니다. 애플리케이션에 와일드카드 문자를 전달하려는 경우 와일드카드 문자를 이스케이프 처리하여 이를 재정의할 수 있습니다. 이 경우 쉘의 반대쪽을 확장하기를 원하기 때문에 이 작업을 수행합니다. 그래서 사용
scp remotehost:\*.txt .
또는 참조를 사용하십시오.
scp 'remotehost:*.txt' .
또는 zsh
특정 noglob
"사전 명령 수정자"를 사용합니다(셸은 명령에서 어떤 glob도 확장하려고 시도하지 않습니다).
noglob scp remotehost:*.txt .
집에 로컬 *.txt 파일이 있는 경우 원격지에 존재하지 않는 이름으로 확장되기 때문에 이는 실제로 올바른 동작입니다. 그것은 당신이 원하는 것이 아닙니다.