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