前回仕事で私がやろうとしていたこと
scp remotehost:~/*.txt .
に関するエラーを受け取りました *
。*.txt file not found
申し訳ありません。作業中ではなく、正確なエラーを忘れてしまいました。
私のワークステーションでは4.3を実行していますzsh
。リモートホストのデフォルトシェルで、以前のバージョンbash
ですzsh
(4.2そして4.3)この点についてです。その後、ワークステーションからbashに切り替えようとし、まったく同じコマンドを実行しました。今回は効果がありました。この状況の根本的な原因は何ですか?これら2つのシステムの間にワイルドカードまたはワイルドカードがありますか(bashに切り替えずに)?
ベストアンサー1
zshは他のほとんどのシェルとは少し異なる動作をします。 Bashなどの他のシェルはワイルドカードを拡張しようとします。何も拡張できない場合は、リテラル文字列(ワイルドカードを含む)をアプリケーションに渡します。しかしzshはそうしません(まあ、それをしないでください選択の余地があります)。 zsh はエラーを出力し、コマンドを実行しません。アプリケーションにワイルドカード文字を渡したい場合は、ワイルドカード文字をエスケープしてそれをオーバーライドできます。この場合、シェルの反対側を拡張したいので、これを行います。だから使用
scp remotehost:\*.txt .
または参照を使用してください。
scp 'remotehost:*.txt' .
または、zsh
特定のnoglob
「事前コマンド修飾子」を使用します(シェルはコマンドからglobを拡張しようとしません)。
noglob scp remotehost:*.txt .
自宅にローカルの* .txtファイルがある場合は、リモートに存在しない名前に拡張されるため、これは実際には正しい動作です。それはあなたが望むものではありません。