SSH를 통해 하나의 별칭을 실행하고 SSH를 통해 다른 별칭을 실행합니다.

SSH를 통해 하나의 별칭을 실행하고 SSH를 통해 다른 별칭을 실행합니다.

SSH를 통해 다른 별칭을 실행하는 SSH를 통해 별칭을 실행하려고 합니다. 가능합니까?

내가 찾고 있어요이것SSH를 통한 별칭 실행과 관련하여 지금까지 다음을 얻었습니다.

ssh develop -t /bin/bash -ic "gotoserver"

gotoserver다음을 실행하기 위한 별칭입니다.

ssh -o StrictHostKeyChecking=no -l user 10.10.10.10

모든 것이 효과가 있었고 마침내 거기에 도달했습니다 10.10.10.10. 하지만 그 안에 또 다른 별칭을 실행하고 싶었기 10.10.10.10때문에 다음과 같이 시도했습니다.

ssh develop -t /bin/bash -ic "gotoserver -t /bin/bash -ic 'loaddocker'"

그러나 이것은 작동하지 않습니다. 그것만 인식이 가능한 것 같습니다 gotoserver. 그래도 끝나긴 하는데 10.10.10.10나머지 명령( -t /bin/bash -ic 'loaddocker')은 무시되는 것 같습니다.

하지만 들어가서 develop실행하면 다음과 같습니다.

gotoserver -t /bin/bash -ic 'loaddocker'

작동하고 loaddocker실행됩니다.

내가 뭘 잘못했나요? develop및 에서 아무것도 변경하지 않고 이 작업을 수행할 수 있는 다른 방법이 있습니까 10.10.10.10?

답변1

별칭 대신 함수를 사용하세요!

function fnchunk () {
    echo -n function\ ;
    typeset -f ${@}
}

function requote () 
{ 
    if (($#)); then
        local re savedq='#...___+++...#' dblquote='"' singlequote="'" escapedsinglequote="\'" escapeddblquote='\"';
        re="$(printf "${savedq}%s${savedq} " "${@}")";
        re="${re//${dblquote}/${escapeddblquote}}";
        echo "${re//${savedq}/${dblquote}}";
    fi
}

function loadDockerWrapper(){
    echo loaddocker # call loadDocker script not alias
    # or if it was an alias turn it into function here
}

function gotoserver(){
    /usr/bin/ssh -o StrictHostKeyChecking=no -l user 10.10.10.10 -tq "$(fnchunk fnchunk requote gotoserver loadDockerWrapper)" ";" $(requote "${@}")
}

function devCmd(){
    /usr/bin/ssh -tq develop "$(fnchunk fnchunk requote gotoserver loadDockerWrapper)" ";" $(requote "${@}")
}

devCmd gotoserver loadDockerWrapper

답변2

gotoserver$@모든 매개변수 와 같은 내용을 포함해야 합니다 gotoserver. 다음과 같이 사용할 수 있습니다.

ssh -o StrictHostKeyChecking=no -l user 10.10.10.10 $@

여기서 $@모든 매개변수는 gotoserver로 전달되며 ssh10.10.10.10에 실행된 명령이 됩니다.

또한 여러 명령을 분리하여 차례로 실행할 수 있습니다 ;. 예를 들면 다음과 같습니다.

echo a ; echo b

관련 정보