scp ワイルドカードが zsh で動作しない

scp ワイルドカードが zsh で動作しない

zshに切り替えましたが、うまくいきます。 1つの奇妙なことは、*ワイルドカードを使用してscpを試みるときに機能せずにbashに入る必要があることです。以下の2番目のコマンドは正常に動作します。

これが起こる理由と解決策のアイデアはありますか?

~/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'

関連情報