2016-06-02 5 views
1

.cshrc 파일을 소스가 잘 작동하는은 Tcl 스크립트를 실행하면 :tcl에서 환경 변수를 설정하는 방법은 무엇입니까?

$ source .cshrc-sample 
$ tclsh invoke.tcl 

다음은 .cshrc 파일입니다

setenv AUTOTEST "/auto/isbutest/frt" 
setenv ATS_EASY "$AUTOTEST" 
setenv ATS_USER_PATH "$AUTOTEST" 
setenv PATH "${AUTOTEST}/bin:${PATH}" 

하지만 티클 자체를 환경 변수를 설정하려고 할 때와 스크립트를 실행하십시오. 다음 오류가 발생합니다.

$ tclsh invoke.tcl 
can't find package ha 
    while executing 
"package require ha" 
    (file "invoke.tcl" line 8)  

M Y의 Tcl 스크립트 - invoke.tcl :

global env 

set env(AUTOTEST) "/auto/isbutest/frt" 
set env(ATS_EASY) "/auto/isbutest/frt" 
set env(ATS_USER_PATH) "/auto/isbutest/frt" 
set env(PATH) "$env(PATH):/auto/isbutest/frt/bin:"; 
package require ha 

어떻게이 .cshrc을 소싱하지 않고 스크립트를 실행할 수 있습니까?

스크립트를 사용하는 환경 변수를 설정할 수 없으므로 변수의 수명은 스크립트의 런타임 내에 있습니다. PATH 변수를 인쇄하려고했지만 필요한 부분을 보여 주지만 왜 작동하지 않는지 알 수 없습니다. 이 다른 해결 방법이 있습니까?

답변

0

몇 가지 가능성이 있습니다. 살펴볼 핵심 사항은 누락 된 모든 환경 변수가 있는지 여부, 즉 Tcl auto_path 전역 변수가 package require 바로 앞에 올 바르며, 계속 진행되고 있는지 여부입니다.

puts "auto_path=$auto_path" 
parray env 

즉시 오류가있는 package require 전에 :

티클 측면에서 가장 쉬운 방법은 추가하는 것입니다. 그것은 많은 정보를 출력해야합니다. (당신이 다르게 TCL_LIBRARY 또는 TCLLIBPATH 환경 변수를 설정하는 경우에 특히주의를 기울이십시오.)

를 그 외에, 그것은 대화 형 모드에서 source D입니다 ~/.tclshrc 파일에 설정된 뭔가, 거기 가능성이 있습니다 (그 프롬프트를 받기 전에 발생합니다.) 그것은 관찰 가능한 변화를 일으킬 수 있습니다. 또 다른 옵션은 ha 패키지의 pkgIndex.tcl 스크립트가 Tcl이 대화식 모드 일 때만 작동하는 단축 명령을 사용하도록 작성된 것입니다. 패키지 색인 정의 스크립트의 오류로 인해 실제로 패키지의 구현이 등록되지 않고 load/source 인 등록 코드가 만들어지고 오류 상태가 표시 될 수 있습니다. 스크립트에서 약어를 사용할 수 있다고 가정하면 은 항상으로 수정되므로 항상 버그입니다. 약어는 Tcl을 대화식으로 사용할 때 편리하며 적절한 저장 코드에두면 안됩니다.

패키지 목록이 완전한지 확인할 수 있습니다. 그 동안이 코드를 사용

catch {package require NoSuchPackage}; # Force immediate population of the list of packages 
puts Packages:\n\t[join [lsort -dictionary [package names]] \n\t] 

를 다시 전역 변수의 설정 후 문제 package require 전에이를 넣어.

관련 문제