일반적으로 사용되는 명령 "템플릿": 매개변수 확장 이스케이프 문자 제거

일반적으로 사용되는 명령 "템플릿": 매개변수 확장 이스케이프 문자 제거

나는 약간 다른 매개 변수를 사용하여 일부 긴 명령을 계속해서 사용하고 있습니다. 예를 들어:

rsync -havu --progress --rsh='ssh -l mylogin' some.machine.somewhere:/some/path /some/local/path

zsh프롬프트에서 명령을 쉽게 삽입한 다음 명령줄을 탐색하여 경로, 호스트 및 로그인에 필요한 변경을 수행할 수 있기 를 원합니다 . zsh 매개변수를 설정했습니다.

FOO="rsync -havu --progress --rsh='ssh -l mylogin' some.machine.somewhere:/some/path /some/local/path"

$FOO그런 다음 프롬프트에 따라 확장 할 수 있습니다 . 그러나 확장된 명령의 모든 공백과 따옴표는 백슬래시로 이스케이프됩니다. zsh확장자에 이스케이프 문자를 넣지 않는 방법이 있나요 ?

유사한 명령에 대한 기록을 검색한 다음 편집할 수 있다는 것을 알고 있습니다. 하지만 여전히 각 새 셸에 긴 문자열을 한 번씩 입력해야 합니다. 나는 또한 내 목적을 달성하는 다른 방법에도 열려 있습니다. Python 스크립트 등을 작성할 수 있지만 이는 상당히 간단한 작업에 비해 많은 오버헤드처럼 보입니다.

답변1

자주 변경하는 옵션에 대한 인수를 허용하는 함수를 사용하는 것이 좋습니다. 이를 ZSH 구성에 넣고 대화형으로 실행할 수 있습니다. 예는 다음과 같습니다.

myrsync() {
   username=$1
   srchost=$2
   srcpath=$3
   destpath=$4
   rsync -havu --progress --rsh="ssh -l $username" "${srchost}:${srcpath}" "$destpath"
}

myrsync mylogin some.machine.somewhere /some/path /some/local/path

관련 정보