を使用してローカルファイルをリモートサーバーにコピーしたいと思いますscp
。
scp -rp local-file my.server.com:/tmp/
場合によっては、リモートサーバーからファイルをコピーする場所を指定することを忘れてしまうことがあります。
scp -rp local-file my.server.com
:
または時には間違って入力することがあります;
。
scp -rp local-file my.server.com;/tmp/
どちらの場合もscp
失敗する必要があります。しかし、代わりに完全に愚かな行動を起こし、ローカルファイルをローカルにコピーしますcp
。
cp local-file my.server.com
でもそうだman scp
と言った。それでは、なぜ自動的に失敗し、このように動作しますか?scp
remote file copy program
cp
この問題に対する解決策はありますか?
私のバージョンopenssh-client
は1:6.0p1-4+deb7u6
ベストアンサー1
Bashでは、このようなラッパー関数を作成できます。
function scp {
if grep -q ':[^ $]' <<< "$*" ; then
command "${FUNCNAME[0]}" "$@"
else
echo "missing or invalid hostname:path in scp command"
return 1
fi
}
ここに非常に粗雑な例があります。コマンドラインに空白以外の文字が1つ以上あることを確認するだけです:
(これは概念証明の例には十分ですが、実際の使用には十分ではありません)。存在する場合はscp
コマンドを実行します。それ以外の場合は、エラーメッセージを出力して終了コード1を返します。
あるいは、スクリプトを書くこともできます。どちらにも違いはありません。
ところで、上で「in bash」と言っていましたが、その理由は上記の機能をbashでのみテストしたからです。これはbashだけがこれを行うことができるという意味ではありません。他のほとんどのsh実装では、同じまたは類似の操作を実行できます。構文は若干異なる場合があり、command scp ...
より一般的な構文の代わりにハードコードする必要がありますcommand "${FUNCNAME[0]} ..."
。
PS:私はscpがこれを「しなければならない」かどうか判断しません。自分のシステムを決定することはあなた次第です。しかし、すべてのカスタムハッキング/松葉杖なしでシステムで作業する必要がある場合、そのようなものに頼ることは深刻な不利益をもたらします。