Bash 기능 scp 파일이 작동하지 않습니다

Bash 기능 scp 파일이 작동하지 않습니다

나는 다음 bash 함수를 작성했습니다.

function to_company() 
{
    scp ${1} [email protected]://home/username 
}

내가 할 때 :

$ to_company code_diff.txt 

비밀번호를 요청한 후 다음 메시지와 함께 실패합니다.

scp: //home/username: not a regular file 

스크립트에 &를 제공하려고 시도했지만 //home/username/동일한 결과를 얻었습니다.//home/username/${1}

위 명령을 수동으로 실행하고 code_diff.txt대신 전달하면 ${1}파일 전송에 문제가 없습니다.

내가 무슨 실수를 했나요?

답변1

중요하지 않지만 원격 경로는 /home/username(슬래시 하나)여야 합니다. Sputnick 이 지적했듯이 ${1}."${1}"

동일한 명령을 복사했는데 테스트할 때 제대로 작동했기 때문에 ("일반 파일이 아님" 오류가 발생하는 경우) [email protected]://home/username.

시도해 볼 또 다른 방법은 디버깅을 추가하고( -vscp 명령에 제공하여) 단서가 있는지 확인하는 것입니다.

function to_company() 
{
    scp -v "${1}" [email protected]:/home/username 
}

답변2

이 문제에 잘못된 방식으로 접근하고 있습니다. 쉘 래퍼를 작성하지 말고 대신 ~/.ssh/config.

Host work
Hostname long.server.name.company.com
User bob

그런 다음 파일을 회사 서버에 복사하려면 다음을 수행하세요.

scp filename.ext work:

원격 경로는 홈 디렉터리에 상대적 work:이므로 work:/home/username.


전달하는 인수에 공백이나 와일드카드가 포함되어 있으면 함수가 실패합니다 \[?*. 이 문제는 매개변수 확장을 큰따옴표로 묶어서 쉽게 해결할 수 있습니다 "$1".변수 및 명령 대체에는 항상 큰따옴표를 사용하십시오..

또 다른 잠재적인 문제는 //경로의 시작이 특별히 해석될 수 있다는 것입니다. 일반적으로 경로의 연속 슬래시는 하나의 슬래시와 동일하지만두 개의 슬래시로 시작하는 경로는 일부 시스템에서 특별한 의미를 갖습니다..

관련 정보