Bash 별칭이 SSH를 통해 작동하지 않습니다.

Bash 별칭이 SSH를 통해 작동하지 않습니다.

내 Bash 별칭은 SSH를 통해 작동하지 않습니다. 예를 들면 다음과 같습니다.

$ ssh remote_name ll dir_name
bash: ll: command not found

Bash 매뉴얼 페이지는 다음과 같이 말합니다.

Aliases are not expanded when the shell is not interactive,
unless the expand_aliases shell option is set using shopt...

그래서 파일 상단에 로컬 파일과 원격 파일을 모두 shopt -s expand_aliases추가했습니다 (어느 파일이 필요한지 확신할 수 없었기 때문입니다. 원격이 맞죠??).~/.bashrc.bashrc

로컬 Bash를 다시 시작하고 ssh remote_name ll dir_name다시 시도했지만 불행히도 여전히 같은 오류가 발생합니다 bash: ll: command not found.

누구든지 작동시키려면 어떻게 해야 하는지 설명할 수 있나요?

내 Bash 버전이 다음과 같은 경우를 대비해:

Local Bash:
$ bash --version 
GNU bash, version 4.3.11(1)-release (x86_64-pc-linux-gnu)

Remote Bash:
$ bash --version 
GNU bash, version 4.3.30(1)-release (x86_64-pc-linux-gnu)

답변1

~/.bashrcbash비대화형 세션이 아닌 비로그인 대화형 세션으로 읽습니다 .

ssh remote some_commandsome_command비대화형 세션에서 실행되므로 bash원격 데이터를 읽을 수 없습니다 ~/.bashrc(물론 로컬 데이터를 읽는 것도 불가능합니다).

정확하게 말하면 비대화형 세션은 환경 변수 또는 (설정된 경우) bash정의된 파일을 읽을 수 있습니다.BASH_ENVENV

별칭을 계속 사용하려면 대화형 모드에서 셸을 열 수도 있습니다.

ssh remote bash -ic 'll'

또한 별칭은 자체 포함되어 있으므로 디렉터리 이름을 제공하는 것처럼 어떤 인수도 허용하지 않습니다. 매개변수를 입력으로 사용하려면 함수를 사용해야 합니다. 유사한 함수 정의는 다음과 같습니다:

ll_f () { ls -al --color=auto "$@" ;}

이제 다음을 수행할 수 있습니다.

ll_f /dir_name

답변2

내가 가장 좋아하는 방식(에서 ~/.bashrc):

function bassh() {
    local host=${1:?'arg #1 missing: remote host'}
    shift
    local command="$@"
    local usage="bassh REMOTE_HOST COMMAND"

    [ "$command" ] || {
        echo -e >&2 "[error] no command provided\nUsage: ${usage}"
        return 1
    }

    ssh ${host} -t bash -ic "'${command}'"
}

-t관련 경고를 피하기 위해 의사 터미널 할당을 강제하는 ssh 옵션에 유의하십시오 .

그런 다음 간단히 호출합니다.

$ bassh REMOTE_HOST ll

답변3

사용

 #!/bin/bash -l

그것은 문제를 해결했다

관련 정보