별칭을 사용하려면 SSH를 통해 원격으로 명령을 실행하세요.

별칭을 사용하려면 SSH를 통해 원격으로 명령을 실행하세요.
shopt -s expand_aliases
ttmp="SUCCESS"
alias aliased_command='echo $ttmp'

위의 줄을 .bashrc 파일에 추가하면 별칭을 원격으로 사용할 수 있습니다.

[USER@REMOTESERVER ~]$ ssh MYSERVER aliased_command
SUCCESS

셸이 비대화형인 경우 Shopt를 사용하여 Expand_aliases 셸 옵션을 설정하지 않으면 별칭이 확장되지 않습니다.

expand_aliases옵션을 사용하면 비대화형 쉘이 별칭을 사용할 수 있습니다.

그러나 내가 실행할 때 :

[USER@REMOTESERVER ~]$ ssh MYSERVER echo $-
himBH

SSH를 통해 원격 명령을 실행하는 것은 대화형 쉘을 사용하는 것으로 보입니다. ( i포함하다)

이 올바른지?

맞다면 Expand_aliases 옵션이 필요한 이유는 무엇입니까?

오류가 발생하는 경우 ssh SERVER COMMAND비대화형 쉘을 사용하는 경우 MYSERVER 파일을 ssh MYSERVER COMMAND읽을 때 이유는 무엇입니까?.bashrc비대화형 쉘은 .bashrc파일을 읽지 않습니다.?

cf) 명령을 인용하면 다른 출력이 생성됩니다.

[USER@REMOTESERVER ~]$ ssh MYSERVER 'echo $-'
hBc

모든 링크, 의견을 보내주시면 감사하겠습니다.

답변1

최소한 두 가지 측면이 있습니다.

1. 견적

인용되지 않은 콘텐츠는 $-귀하가 확장합니다.현지의껍데기. 로컬은 ssh얻은 여러 인수를 기반으로 셸 코드(원격 측에서 실행하기 위해)를 작성할 수 있습니다. 이렇게 하면 ssh MYSERVER echo $-원격 쉘을 얻게 됩니다 echo himBH. 이 himBH문자열은 로컬 셸에서 제공됩니다. 이렇게 하면 ssh MYSERVER 'echo $-'원격 쉘을 얻게 됩니다 echo $-.

바라보다SSH를 통해 복잡한 명령줄을 실행하는 방법그리고 내 대답. 여기서는 모든 내용을 반복하지 않겠습니다. 가장 중요한 것:

원격 셸이 얻는 것을 제어하려면 $command_line_built_by_ssh이전에 발생한 구문 분석 및 해석을 이해하고 예측하고 조율해야 합니다. 로컬 명령을 내려야 하므로뒤쪽에ssh로컬 셸을 실행하고 이를 소화하면 원격 측에서 실행하려는 내용이 정확하게 됩니다 .$command_line…

ssh좋은 접근 방식은 정확한(원격) 명령을 단일 인수로 로컬에 전달하는 것입니다. 그게 바로 당신이 하는 일입니다 ssh MYSERVER 'echo $-'. 작은 따옴표는 기본 확장을 방지합니다. $-원격 셸의 컨텍스트에서는 인용되지 않았습니다.

결과 hBc는 여기원격 쉘에서. 원격 셸은 대화형이 아닙니다.

2. Bash는 똑똑해지려고 노력합니다

비대화형 쉘 소싱에 대해서는 .bashrc다음을 참조하세요.내 다른 답변은 다음과 같습니다.:

트위스트 2번: Bash는 SSH 서버에서 실행될 때와 마찬가지로 네트워크 연결에 연결된 표준 입력으로 실행 중인지 확인하려고 합니다. Bash가 이런 방식으로 실행 중이라고 판단하면 에서 명령을 읽고 실행합니다 ~/.bashrc.

당신이 연결한배쉬 문서. 내가 말하는 것은 "원격 쉘 데몬에 의해 호출됨"입니다. 더 많은 우여곡절이 있습니다. 전체 링크에 대한 답변을 참조하세요.

관련 정보