Bash에서 별칭에 대한 인수를 자동으로 인용하거나 group commandline 인수는 어떻게하나요?
문제
명령을 내리고 원격 호스트에서 실행하는 스크립트가 있습니다. 예를 들어 잘 작동합니다.
$ rexec "ant build_all"
원격 시스템에서 "ant build_all"명령을 실행합니다 (SSH를 통과하는 등).
게으르기 때문에이 명령 (그리고 궁극적으로 다른 여러)에 대한 별칭을 설정하고 싶습니다. 예를 들어, 나는 그냥 호출 할 수 있습니다.
$ rant build_all
그리고 Bash는 자동으로 호출됩니다
$ rexec "ant build_all"
별명으로 이것을 시도했지만 정의하면
alias rant=rexec ant
그러면 "rant"로 전달 된 모든 주장은 다음과 같이 끝까지 추가됩니다.
$ rant build_all -Dtarget=Win32
(interpreted as:)
$ rexec "ant" build_all -Dtarget=Win32
Rexec은 실제로 하나의 주장을 수행하고 다른 주장을 무시하기 때문에 이것은 실패합니다.
나는 Bash 래퍼 스크립트로 이것을 할 수 있었지만 Bash가 나를 위해 이것을하기위한 내장, 아마도 이름이 지정된 alias 또는 perl-like quote string 명령 (예 : qw / / ) 또는 그와 같은.
해결책
모든 논증에 대해서는 이것이 효과가 있습니다.
function rant () {
rexec "ant $*"
}
통과하는 주장에 따라 인용문을 조정해야 할 수도 있습니다.
다른 팁
나는 Ken G의 답변을 사용하게되었지만 하나는 더 나은 : rex를 함수로 정의합니다.
function rex {
run_remote.sh -c "$*"
}
그런 다음 다음과 같은 별칭에서 rexec을 사용할 수있었습니다.
alias rant="rex ant"
그리고 여전히 내가 필요한 방식으로 논쟁을 감싸도록하십시오.
나는 bash에서 그런 기능을 사용할 수 있다는 것을 잊었다. 이것은 래퍼 스크립트를 만들 필요없이 정확히 내가 필요로하는 것입니다.
좋은 팁, 감사합니다!
편집 : "rexec"가 "Rex"로 변경되었습니다. 내 시스템은 이미 "rexec"라는 프로그램이 있다는 것을 알았 기 때문입니다.
별명이 아닌 함수로 수행 할 수 있습니다.
function rant { rexec "ant $1"; }
별명처럼 명령 줄에서 호출 할 수 있습니다.