외부에서 볼 수 있도록 bash 쉘 스크립트 내부에 별명을 설정하는 방법은 무엇입니까?
OSX : 이것은 명령 줄에서 작동합니다.
alias ruby="/opt/local/bin/ruby1.9"
그러나 쉘 스크립트에서는 효과가 없습니다. ruby 1.8과 ruby 1.9 사이를 전환하는 스크립트를 작성하고 싶습니다. 그래서 이것은 내 프로필이 아닌 스크립트 여야합니다.
"source script.sh"는 작동하지만 "./script.sh"는 작동합니다. 왜 이런거야? 내 스크립트에서 어떻게 복제 할 수 있습니까?
./script.sh
하위 셸에서 실행되며 변경 사항은 하위 셸에만 적용됩니다. 명령이 종료되면 하위 쉘이 이동하고 변경 사항도 적용됩니다.
. ./script.sh
또는 source ./script.sh
을 사용하여 파일을 소싱하면 현재 셸 컨텍스트에서 파일 이름 인수에서 명령을 읽고 실행합니다. 즉, 스크립트가 source
기존 셸 내에서 실행될 때 스크립트에 의해 생성되거나 수정 된 모든 변수는 스크립트가 완료됩니다.
간단한 대답은 스크립트가 비대화 형 셸을 만들고 기본적으로 expand_aliases 옵션이 종종 비활성화된다는 것입니다.
별칭 확장을 활성화하려면 스크립트 상단에 다음 줄을 추가하면됩니다.
shopt -s expand_aliases
이 문제는 나를 괴롭 히고 있었기 때문에 조사를 한 다음 직접 수정하는 방법을 알아 낸 후 블로그 게시물을 작성했습니다 . Linux 쉘 스크립트 내에서 별칭 사용에 대한 게시물을 작성했습니다.
물론, 그 부분을 알아 낸 직후에, 필요한 것은 작동하지만, 서브 쉘 안에 서브 쉘이 있으면 작동하지 않는다는 것을 알았습니다. 나는 여전히 그 문제에 대한 해결책을 찾고 있습니다. 블로그 게시물에서 쉘 스크립트에서 별칭을 가져 오는 데 사용하는 저렴한 해킹에 대해 언급했습니다. 우아하지는 않지만 실제로 내가 가진 여러 하위 셸 문제에서도 작동합니다.
.profile에 함수를 작성하여 별칭을 전환 할 수 있습니다.
function toggle-ruby() {
if [ "$1" == "1.9" ]; then
alias ruby=/opt/local/bin/ruby1.9
else
alias ruby=/opt/local/bin/ruby1.8
fi
}
그런 다음 실행할 수 있습니다.
toggle-ruby 1.9
또는
toggle-ruby 1.8
앞뒤로 전환합니다.
Ruby 버전을 전환해야하는 경우 rvm을 사용해보세요 .
'developer tip' 카테고리의 다른 글
MVC Html.Partial 또는 Html.Action (0) | 2020.12.06 |
---|---|
Microsoft Visual Studio 2012 오류 : 제약 조건과 일치하는 내보내기를 찾을 수 없습니다. (0) | 2020.12.06 |
문자열에서 Python 와일드 카드 검색 (0) | 2020.12.06 |
Integer 래퍼 클래스를 사용하여 생성되는 개체는 몇 개입니까? (0) | 2020.12.06 |
Powershell에서 로그 파일 만들기 (0) | 2020.12.06 |