로컬 복사를 수행할 때 scp가 실패할 수 있습니까?

로컬 복사를 수행할 때 scp가 실패할 수 있습니까?

scp로컬 복제가 실패합니까? 실수 192.168.11.5로 입력하려고 했던 이름과 동일한 이름 의 파일을 만들어 192.168.11.5:해당 파일을 원격 컴퓨터에 복사하는 것은 짜증나는 일입니다 .

답변1

기본적으로 이와 같지는 않지만 빠른 것을 원한다면 원시 바이너리를 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. 매개변수를 확인하기 위해 래퍼 스크립트를 작성할 수 있습니다. 여기에 하나가 있습니다(테스트되지 않았으며 브라우저에 직접 입력됨). 마지막 인수(대상)가 포함되어 있는지 :또는 이전의 옵션이 아닌 인수(소스)가 모두 포함되어 있는지 확인합니다 :.

#!/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 "$@"

관련 정보