scpを必要に応じて動作させる(リモートファイルコピープログラム)

scpを必要に応じて動作させる(リモートファイルコピープログラム)

を使用してローカルファイルをリモートサーバーにコピーしたいと思います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と言った。それでは、なぜ自動的に失敗し、このように動作しますか?scpremote file copy programcp

この問題に対する解決策はありますか?

私のバージョンopenssh-client1: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がこれを「しなければならない」かどうか判断しません。自分のシステムを決定することはあなた次第です。しかし、すべてのカスタムハッキング/松葉杖なしでシステムで作業する必要がある場合、そのようなものに頼ることは深刻な不利益をもたらします。

おすすめ記事