Bash

scp、globbing 和不同的 shell

  • January 9, 2011

前幾天在工作中我試著做

scp remotehost:~/*.txt .

我收到一個關於 的錯誤 **.txt file not found 抱歉,不在工作中,我忘記了確切的錯誤

在我的工作站上,我執行zsh4.3。在 remotehostbash上是預設 shell,並且版本zsh較舊(4.2 vs 4.3)。然後我嘗試在我的工作站上切換到 bash,並執行完全相同的命令。這次奏效了。這是什麼根本原因。無論如何在這兩個系統之間進行萬用字元或萬用字元(無需切換到bash)?

zsh 的行為在這裡與大多數其他 shell 略有不同。其他 shell,如 bash,嘗試擴展萬用字元。如果它們無法擴展為任何內容,則將文字字元串(包含萬用字元)傳遞給應用程序。但是 zsh 並沒有這樣做(好吧,有一個選擇,是否這樣做)。zsh 將列印該錯誤並且不執行該命令。如果您真的希望將萬用字元傳遞給應用程序,您可以通過轉義萬用字元來覆蓋它。在這種情況下,您這樣做是因為您希望另一側外殼擴展它。所以使用:

scp remotehost:\*.txt .

這實際上是正確的行為,因為如果您家中確實有一些本地 *.txt 文件,它們將被擴展為遠端可能不存在的名稱。那不是你想要的。

引用自:https://unix.stackexchange.com/questions/5572