zsh使用scp命令時*通配符出現no matches的錯誤

轉載請註明文章出處: zsh使用scp命令時*通配符出現no matches的錯誤

MacOS升級後zsh成了默認的shell,順應潮流開始了zsh的使用之旅。html

今天使用scp複製遠程多個文件時出現以下錯誤:linux

# 複製某個目錄下的全部配置文件(*.conf)
scp host:/xxxx/*.conf .
# 錯誤以下錯誤
# zsh: no matches found: host:/xxxx/*.conf

很確定這條命令語句在bash中能正常如期工做,出現這樣的問題應該是zsh的鍋。做爲資深linux用戶,能夠很快看出了問題所在:zsh試圖將*通配符展開,在本地未找到對應文件,因而出現「no matches」的錯誤。web

通過我的嘗試以及網上搜索,有兩種解決方案:shell

  1. 不要讓zsh將*號展開;具體作法有:bash

    • 將*號部分用引號引發來,單雙引號都所無謂。例如:scp "host:/xxxx/*.conf" .,或者scp 'host:/xxxx/*.conf' .。也能夠只引用路徑部分,例如:scp host:'/xxxx/*.conf' .
    • 用反斜杆阻止zsh轉義:scp host:/xxxx/\*.conf .
  2. 設置nonomatch選項,讓zsh匹配失敗時不報錯並使用本來內容。具體作法是:setopt nonomatch,而後再使用scp命令。推薦的作法是寫入到.zshrc文件中,讓之後的使用中自動生效。

參考

  1. zsh使用scp命令時*通配符沒法使用
相關文章
相關標籤/搜索