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