2014-04-09 5 views
2

이 질문은 자주 묻는 것처럼 보이지만 여전히 내 문제와 관련하여 만족스러운 대답이 아닙니다. 그러므로, 당신이 나를 도울 수 있기를 바랬습니다.BASH : 예상치 못한 토큰 근처에서 구문 오류가 발생했습니다. 'do'라는 별칭을 사용하여 구문 오류가 발생했습니다.

다음 오류가 우분투 LTE 13.04에서 터미널을 여는 발생 : bash_completion ''

나는 특정 체크 '할 예기치 않은 토큰 done' bash: /usr/share/bash-completion/bash_completion: line 225: 근처

구문 오류가 - 잘 보인다. 또한, .bashrc 파일에서 다음 명령으로 압축했습니다. 다만 완벽하게 예외를 제기하지 않고 다음 작품 비록

alias do='rsync -r -e ssh --exclude='file.py' [email protected]:/path/to/folder /do/here' 

:

alias up='rsync -r -e ssh --exclude='file.py' /path/to/folder [email protected]:/do/here' 

이 때문에 --exclude 플래그의 발생하면 내가 확인하지만하지 않습니다. 명령에 문제가있는 것처럼 보입니다. 두 명령 모두 완벽하게 일을 수행하지만입니다. 첫 번째 오류 만 발생시킵니다. 아이디어가 있으십니까?

+1

기술적으로 별칭은 작은 따옴표로 묶인 문자열 인 'file.py' 문자열과 작은 따옴표로 묶은 다른 문자열을 연결 한 것으로 정의됩니다. 작은 따옴표는 중첩 할 수 없습니다. 'file.py'가'file1.py' (공백 포함)이면 별칭이 작동하지 않습니다. – chepner

+0

@chepner, 참으로 - 그 대신에 함수를 사용하라는 대답이 있습니다. –

답변

7

bash에서 do은 예약어입니다. do ... done 블록을 찾고 있습니다. 별칭의 이름을 지정하면됩니다.

+0

그것은, Jeez ...하지만, 같은 명령이 scp로 잘 작동합니다 ('do'와 함께). 우리가 말했듯이 모든 나무 때문에 숲을 볼 수없는 경우가 있습니다. Merci beaucoup. – Johngoldenboy

3

do은 쉘 키워드입니다. 버그를 발생시키지 않으면 별명으로 사용할 수 없습니다.

이상 - 별칭이 아닌 함수 사용을 고려하십시오. 그들은 실질적으로 더 많은 제어를 제공합니다. 이 별칭은 너무로 재 작성 될 수 있습니다

do_sync() { 
    rsync -r -e ssh --exclude='file.py' \ 
    [email protected]:/path/to/folder \ 
    /do/here \ 
    "[email protected]" 
} 

대신 별명의 기능을 사용하면 당신은 거의 확실하게, 조건부 논리는, 꼬리가 아닌 다른 위치에 인수를 삽입 않으며, 크게 별명되는, 여기 (인용을 단순화 할 수 있습니다 별칭 텍스트와 별칭 텍스트 내에서 이스케이프없이 동일한 견적 유형을 사용했기 때문에 원하는 것을 수행하지 못했습니다.

관련 문제