bashrc + 소스가 .bashrc 파일을 새로 고치지 않는 이유

bashrc + 소스가 .bashrc 파일을 새로 고치지 않는 이유

bashrc파일 에 다음 줄을 추가합니다

alias reboot="echo you not allowed to do reboot on this machine - sorry"

그래서 우리는 얻는다

more ~/.bashrc

# .bashrc

# User specific aliases and functions

alias rm='rm -i'
alias cp='cp -i'
alias mv='mv -i'

# Source global definitions
if [ -f /etc/bashrc ]; then
        . /etc/bashrc
fi


alias reboot="echo you not allowed to do reboot on this machine - sorry"

그럼 우리는 그랬어

source ~/.bashrc

사실 우리가 할 때는

reboot

우리는

you not allowed to do reboot on this machine - sorry

하지만 실제 재부팅으로 돌아가고 싶을 때는 이 줄을 제거합니다 --> alias reboot="echo you not allowed to do reboot on this machine - sorry"

다음과 같이:

# .bashrc

# User specific aliases and functions

alias rm='rm -i'
alias cp='cp -i'
alias mv='mv -i'

# Source global definitions
if [ -f /etc/bashrc ]; then
        . /etc/bashrc
fi

그런 다음 bashrc를 새로 고칩니다.

source ~/.bashrc

하지만 재부팅을 시도하면 여전히 이전 별칭이 표시됩니다.

 you not allowed to do reboot on this machine - sorry

여기서 우리는 무엇을 놓치고 있나요?

함수를 사용한 또 다른 예

echo '
function reboot
{
echo "ERROR reboot command not allowed on this machine"
return 1
}
' >>/root/.bashrc

위의 예에서는 할 수 없습니다unalias

답변1

구매한다고 해서 ~/.bashrc모든 설정이 마법처럼 재설정되는 것은 아닙니다. 파일은 실행될 명령 묶음일 뿐입니다. 깨끗한 쉘에서 실행하면 기대한 결과를 얻을 수 있습니다.

그러나 별칭이 이미 정의된 경우 파일에 별칭이 없어도 별칭이 취소되지는 않습니다. 생각해 보세요. 파일에서 명령을 수동으로 실행하면 정의된 별칭에 영향을 주지 않습니다. unalias reboot파일에 없습니다. 구매는 ~/.bashrc실제로 주문을 실행하는 것이지 "수동으로" 실행하는 것이 아닙니다.

.bashrc쉘의 현재 설정을 담고 있는 파일로 생각하지 마십시오 . 소스가 있다는 뜻이에요깨끗한 쉘에 들어가면 자동으로. 사람들은 때때로 수동으로 다시 가져오고 무언가를 추가하면 *추가된 항목이 실행되기 때문에 작동합니다. 삭제된 내용은 실행되거나 마법적으로 복원될 수 없습니다. 새 셸을 시작하고 .bashrc설계된 대로 작업을 수행합니다.

별칭이나 함수를 우회하는 것은 매우 쉽습니다. 별칭이나 기능은 재시작을 비활성화하는 좋은 방법이 아닙니다.


* 이전 작업을 두 번 실행하면 발생할 수 있는 부작용에 적용됩니다.

관련 정보