프롬프트 문자열 검사를 제거한 후 ssh에서 .bashrc를 가져옵니다.

프롬프트 문자열 검사를 제거한 후 ssh에서 .bashrc를 가져옵니다.

비대화형으로 가져와야 하는 .bashrc 파일이 있습니다. 문제는 파일에 다음과 같은 반환 문이 있어 코드를 통한 구매를 방지한다는 것입니다.

[ -z "$PS1" ] && return 

원격 .bashrc 파일을 수정하지 않고 이 문제를 해결하기 위해 cat이 줄을 변경했는데 다음과 grep같습니다 source.

user@host -t "
  source <( echo \"\$(cat /home/release/.bashrc | grep -v \"return\")\" ); 
  alias v; 
  v"

PS: 출처가 있나요?.bash_config 파일출처가 전혀 없는 것 같네요.

내가 이상하게 생각하는 점은 다음과 같이 별칭을 선언하면 다음과 같다는 것입니다.

alias v='cat somefile'

그런 다음 이전과 같이 다음 두 명령을 실행합니다.

alias v;
v;

나는 다음을 얻습니다산출각각:

alias v='cat somefile'
bash: v: command not found

내 질문은 별칭이 정의되어 있음을 알 수 있는데 왜 명령을 인식하지 못하는 것입니까?

답변1

bash매뉴얼 페이지 에서

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

아시다시피, 쉘 스크립트를 실행하면 스크립트를 실행하고 출력을 현재 쉘로 반환하는 또 다른 하위 쉘이 생성됩니다. 따라서 스크립트는 비대화형 셸에서 실행됩니다.

권장하지는 않지만 다음 명령을 사용하여 이 동작을 변경할 수 있습니다.

 shopt -s expand_aliases
 alias v='cat somefile'
 v

작동하는 것을 확인해야 합니다. 그것을 사용하지 말라는 조언은 게으르고 일을 당연하게 여기며 자신이 한 일을 잊어버리는 사람들로부터 나옵니다. 더 푸른 환경으로 나아가면서 시스템 제어권을 새로운 시스템 관리자에게 넘겨야 한다면 신의 도움이 필요합니다. 어쩌면 그 불쌍한 사람은 당신이 무슨 짓을 했는지 전혀 모르고 발에 총을 쐈을 수도 있습니다. 제가 조언하는 것은 광범위하게 맞춤화된 환경보다는 간단하고 잘 알려지고 수용되는 운영 원칙을 고수하라는 것입니다.

관련 정보