환경을 설정하기 위해 많은 별칭을 만드는 스크립트 (쓰기 권한이 없음)를 사용합니다. 내 환경을 설정하기 위해 bash 함수를 만들고 싶지만 별칭이 함수 본문에서 살아남지 않는 것 같습니다.
다음은 최소한의 예입니다.
# aliases.sh
alias fooAlias='echo "this will never work!"'
.
# .bashrc
function setupLotsOfThings() {
source aliases.sh
fooAlias
}
.
이제 aliases.sh대화식으로 간단히 소스를 작성 하면 정상적으로 작동합니다.
[mycomputer]~/ $ source aliases.sh
[mycomputer]~/ $ fooAlias
this will never work!
그러나 대신 .bashrc에 정의 된 함수를 호출하면 정의를 소싱 한 후 별칭을 인식하지 못합니다.
[mycomputer]~/ $ setupLotsOfThings
-bash: fooAlias: command not found
무슨 일이야? alias함수에서 사용될 때 명령 의 범위에 대해 누락 된 것이 있습니까?
편집 : 나는 최소한의 예를 넘어서 세부 사항을 추가하여 내가 성취하려는 것에 약간의 빛을 비출 것입니다.
내 작업을 위해 클러스터 및 / 또는 그리드에서 많은 소프트웨어를 개발하고 실행합니다. 다른 gcc 버전, 특정 소프트웨어 릴리스, 구성 및 데이터 PATH 및 다양한 환경 변수와 같이 완전히 다른 환경이 필요한 여러 프로젝트가 있습니다. 관리자는 일반적으로 다른 기능이나 별명을 호출하거나 다양한 스크립트를 실행하는 쉘 기능 또는 별명을 정의하여 다양한 것을 설정하는 스크립트를 제공합니다. 저에게는 블랙 박스입니다.
하나의 명령으로 다양한 환경을 설정하고 싶습니다. 현재 나는 다음과 같은 일을한다.
[mycomputer]~/ $ source /some/environment/setup/script.sh
[mycomputer]~/ $ aliasToSetupSomeSoftwareVersion #this was defined in the above
[mycomputer]~/ $ anotherAliasForOtherSoftware
[mycomputer]~/ $ source /maybe/theres/another/script.sh
[mycomputer]~/ $ runSomeOtherSetup # this was defined in the new script
이러한 명령은 일반적으로 순서대로 실행해야합니다. 내 생각은 기본적으로 위의 줄을 함수 블록에 복사하는 것이지만 원래 예제에서 볼 수 있듯이 작동하지 않습니다. 대체 해결 방법은 환영 이상입니다!