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 "$@"