bash: 동적 환경 제어

bash: 동적 환경 제어

환경 변수를 수정하는 응용 프로그램이 있습니다. 목적은 수정된 상황별 환경으로 bash 쉘을 시작하는 것입니다.

내 애플리케이션이 환경을 수정하고 수정된 환경에서 "bash --noprofile --norc"를 수행하면 별칭이 제거되는 것을 제외하고는 원하는 동작을 거의 얻을 수 있습니다. 로그인하고 OS에서 직접 셸을 열면 "일반" 별칭을 얻지만 내 애플리케이션이 bash를 시작하면 init 파일을 건너뛰기 때문에 별칭을 얻지 못합니다.

bash를 동적 소스에서 초기화하는 방법이 있습니까? 즉, 내 애플리케이션이 모든 다양한 사용자/시설 설정(별칭 포함)과 함께 "bash"를 실행하도록 한 다음 마지막에 내 애플리케이션에 적용해야 하는 차이점을 얻을 수 있다면 도움이 될 것입니다. 이상적으로 이것은 내 사용자를 위해 준비된 셸을 여는 것입니다. 나는 매뉴얼 페이지에서 이것을 찾지 못했습니다(또는 아마도 이해했을 수도 있습니다).

이상적인 세계에서는 사용자/팩토리 설정을 리팩토링하여 더 재진입 가능하게 만들 수 있습니다(애플리케이션을 알고 다시 발생할 필요가 없는 재초기화 단계를 건너뛰기). 실제로는 약간 번거롭습니다.

어떤 제안이 있으십니까? 감사해요.

답변1

.bashrc를 좀 더 모듈식으로 만든 다음(예: 별칭을 사용하여 .aliasrc를 가져옴) 사용자 지정 환경에서 해당 환경에 대해 지정한 모듈만 선택하도록 할 수 있습니다.

답변2

bash --noprofile --norc <<ALIAS
$(alias)
exec </dev/tty
ALIAS

bash --noprofile...별칭을 알고 있는 비트에서 이것을 실행하면 트릭을 수행할 수 있습니다 bash.

그렇지 않으면 @WilliamEverett가 제안한대로 할 수 있습니다(나는 이것이 궁극적으로 더 나은 접근 방식이라고 생각합니다). 이를 촉진하는 한 가지 방법은 다음과 같습니다.

alias >~/.aliasrc
{   cp ~/.bashrc ~/.bashrc.old
    grep -v '^ *alias' <~/.bashrc.old
    echo '. ~/.aliasrc'
} >~/.bashrc

alias일부 정의가 여러 줄인 경우 생성된 rc 파일과 저장되는 .old 파일을 비교해야 합니다 . 정렬 후 다음을 수행할 수 있습니다.

bash --noprofile --rcfile ~/.aliasrc

답변3

당신은 넣을 수 있습니다

if [ -f ~/.Mayur_Patel_special ]
then
    . ~/.Mayur_Patel_special
    rm ~/.Mayur_Patel_special
fi

.bashrc그런 다음 애플리케이션 에서 파일을 생성하도록 하세요. 그리고 분명히 달려요bash 아니요그리고 --noprofile옵션 --norc. 여러 인스턴스가 동시에 실행될 가능성이 있는 경우 PID를 결합하여 파일 이름을 고유하게 만드십시오.

관련 정보