ローカルコピーを実行するとscpが失敗することがありますか?

ローカルコピーを実行するとscpが失敗することがありますか?

scpローカルレプリケーションは失敗しますか?誤っ192.168.11.5て入力しようとした名前と同じ名前のファイルを作成し、192.168.11.5:そのファイルをリモートコンピュータにコピーするのは面倒です。

答え1

基本的にこれと同じではありませんが、高速なものが必要な場合は、rawバイナリをscp.origに移動し、入力を受け取る新しいシェルスクリプトを持つように、周囲にラッパーを作成できます。入力を確認し、:inがあることを確認して渡します。続行するように求められない場合はどうなりますか?

編集:この投稿は私の質問に対する答えなので受け入れます。しかし、問題を解決するために書いたシェル関数を追加したいと思います。

# Simple wrapper around scp to avoid forgotten colon's
scp() {
    if [[ $@ == *:* ]]; then
        # Looks like a valid command so run it
        command scp "$@"
    else
        echo -n "Would you like to add a colon to the end of the function? [y/n] "
        read response
        if [ "$response" = "y" ]; then
            command scp "$@":
        else
            command scp "$@"
        fi
    fi
}

答え2

にはそのようなオプションはありませんscp。パラメータを確認するためにラッパースクリプトを作成できます。ここに1つあります(テストされておらず、ブラウザに直接入力されます)。最後の引数(ターゲット)が含まれているか:、以前のオプションではなく引数(ソース)がすべて含まれていることを確認してください:

#!/bin/sh
eval "target=\${$#}"
case $target in
  *:*) :;; # remote target
  *) # local target
    while getopts F:P:S:c:i:l:o:1246BCpqrv OPTLET; do :; done
    i=$OPTIND
    while [ $i -lt $# ]; do
      i=$((i+1))
      eval "source=\${$i}"
      case $source in
        *:*) :;; # remote source
        *)
          echo 1>&2 "Refusing to copy a local file to a local file with scp"
          exit 99;;
      esac
    done
esac
exec scp "$@"

関連情報