zsh로 전환했는데 잘 작동합니다. 한 가지 이상한 점은 * 와일드카드를 사용하여 scp를 시도할 때 작동하지 않고 bash로 들어가야 한다는 것입니다. 아래 두 번째 명령은 정상적으로 작동합니다.
이런 일이 발생하는 이유와 해결 방법에 대한 아이디어가 있습니까?
~/dmp ⌚ 16:06:10
$ scp abc@123:/home/se/exports/201405091107/* .
zsh: no matches found: root@uf3:/home/se/exports/201405091107/*
~/dmp ⌚ 16:06:53
$ bash
sean@seanlaptop:~/dmp$ scp abc@123:/home/se/exports/201405091107/* .
답변1
abc@123:/home/se/exports/201405091107/*
쉘(bash 및 zsh)은 로컬 시스템의 파일과 일치하는 glob으로 해석하려고 합니다 . 쉘은 그것이 무엇인지도 모르고 scp
, 원격 파일과 일치시키려고 하는지도 모릅니다.
bash와 zsh의 차이점은 와일드카드 실패 시 기본 동작입니다. Bash에서 glob이 아무것도 일치하지 않으면 원래 glob 패턴을 인수로 전달합니다. zsh에서는 오류가 발생합니다.
이 문제를 해결하려면 쉘이 이를 로컬 glob으로 해석하지 않도록 인용해야 합니다.
scp 'abc@123:/home/se/exports/201405091107/*' .
(기타 유사한 작업 ...1107/'*'
이나 ...1107/\*
작업도 허용됩니다)
zsh 불일치가 bash와 동일하게 동작하도록 변경하려면 다음을 수행할 수 있습니다.
setopt nonomatch
답변2
이 답변을 확인하세요.https://superuser.com/a/740728/978073
zprezto 사용자의 경우 명령 앞에 백슬래시를 붙이면 작동합니다!
바꾸다,
$ scp <command>
그리고
$ \scp <command>
답변3
저는 MacOS Catalina를 사용하고 있으며 setopt nonomatch가 효과가 없습니다.
다음 문제를 해결했습니다.https://superuser.com/a/740728/978073
영구적으로 만들려면 ~/.zshrc를 편집하세요.
#alias scp='noglob scp'
alias scp='\scp'