scp、globbing、その他のシェル

scp、globbing、その他のシェル

前回仕事で私がやろうとしていたこと

scp remotehost:~/*.txt .

に関するエラーを受け取りました **.txt file not found 申し訳ありません。作業中ではなく、正確なエラーを忘れてしまいました。

私のワークステーションでは4.3を実行していますzsh。リモートホストのデフォルトシェルで、以前のバージョンbashですzsh4.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ファイルがある場合は、リモートに存在しない名前に拡張されるため、これは実際には正しい動作です。それはあなたが望むものではありません。

おすすめ記事