linge.sh
내 사용에서 .bashrc
호출하는 bash 스크립트가 있습니다.
source ${HOME}/Opstk/bin/linge/linge.sh
linge.sh
이제 bash 파일을 호출하여 선택적으로 활성화된 추가 기능을 포함하고 싶습니다.
${HOME}/Opstk/bin/linge/edvart/edvart.sh
그냥 사용
source ${HOME}/Opstk/bin/linge/edvart/edvart.sh
존재하다
${HOME}/Opstk/bin/linge/linge.sh
?
사용자가 터미널을 시작할 때마다 함수 호출을 사용할 수 있기를 원합니다.
함수는 다음과 같이 정의됩니다.
linge-environ-texinfo
{
...
}
export -f linge-environ-texinfo
터미널에 있을 때 원하는 대로 함수를 호출하고 싶습니다.
linge-environ-texinfo -opt1 --opt2=val param1 param2
답변1
파일에 액세스 하면 source
현재 셸의 파일에 있는 명령을 실행합니다. 이는 본질적으로 파일 내용을 터미널에 직접 한 줄씩 입력하는 것과 다르지 않습니다. 귀하의 파일에도 동일하게 적용됩니다 .bashrc
. 가져오면 현재 셸에서 모든 명령을 실행하고, 다른 파일을 가져오면 현재 셸에서도 실행됩니다. 조달 파일은 다양한 부분을 여러 모듈로 나누어 .bashrc
뭔가를 조정할 때마다 거대한 파일을 볼 필요가 없도록 하는 깔끔한 방법이 될 수 있습니다.
export
반면에 내보낸 쉘에서 실행된 명령에 대해 지정된 이름/변수를 제공합니다. 예를 들어, FOO=bar
변수를 내보내지 않고 셸에서 변수를 정의한 다음 FOO
해당 스크립트의 컨텍스트에서 변수가 "bar"와 동일할 것으로 예상하여 스크립트를 실행하는 경우 잘못된 작업을 수행하는 것입니다. 추가 컨텍스트가 서브쉘을 실행하기 위한 스크립트가 아직 제공되지 않았으므로 FOO
거기에서 설정이 해제됩니다. 을 사용하면 export
해당 이름을 제공하고 스크립트에서 생성된 모든 프로세스(스크립트 포함)에 대해 해당 이름을 지정된 값(제공된 경우)으로 설정하도록 쉘에 지시하므로 이 문제가 해결됩니다.
따라서 원래 질문에 대해 - 새 셸을 실행하자마자 사용할 수 있는 기능을 정의하는 경우 .bashrc
원하는 경우 해당 기능이 포함된 파일을 가져오는 것이 좋습니다. 마찬가지로, 일부 기능 세트를 해당 기능을 사용하려는 다른 파일로 효과적으로 가져오려는 경우 해당 기능을 사용하려는 파일로 해당 기능이 포함된 파일을 가져오기만 하면 됩니다. 이것이 필요한 유일한 export
경우는 정의한 이름에 액세스해야 하는 일부 하위 프로세스를 실행하는 경우입니다.
하지만 앞으로 이와 같은 문제가 발생하면 먼저 확인하는 것을 잊지 마십시오. help
그렇지 않으면 man
장기적으로 많은 문제를 줄일 수 있습니다.