2011-04-01 14 views

답변

25

$::env을 사용하면 모든 환경 변수에 액세스 할 수 있습니다. 액세스 할 수 TMP 환경 변수가이 작업을 수행 : 여기

set tmpdir $::env(TMP) 

더 많은 정보 http://wiki.tcl.tk/1624

+0

그냥 코드를 작성하고 실행하십시오. 그러나 나는 얻지 않는다. 나는 tclsh 프롬프트에있다. 내 프롬프트는 %입니다. 그래서 나는 단지 프롬프트에서 % tmpdir $ :: env (TMP)를 입력했을뿐입니다. 출력은 ":: env (TMP)"를 읽을 수없는 것과 같습니다 : 그런 변수가 없습니다. –

+0

사실 저는 proc를 쓰고 싶습니다. 배시 환경 변수 값을 반환하는 tcl입니다. –

+1

TMP라는 환경 변수가 없기 때문입니다. 내가 준 링크를 읽었 니? – TrojanName

4
$ export var=42 
$ tclsh 
% puts $env(var) 
42 
+0

TMP 환경 변수는 bash 스크립트에서 정의됩니다. 그래서 내가하고 싶은 것은 tcl의 환경 변수에 접근하는 것이다. 내 tcl 프롬프트는 %입니다. 그래서 마침내 tcl의 환경 변수에 액세스하려고합니다. –

+0

TMP 환경 변수는 $ env (TMP)입니다. **하지만 ** : tash 스크립트가 bash 스크립트에서 호출 되었습니까? 변수는 전역 변수입니까 (예 : 내보내기)? – hynek

+0

예. 잘 작동합니다. 하지만 내 질문은 환경 변수가 bash 또는 쉘 스크립트에서 정의 된 것이고 tcl의 proc을 사용하여 액세스하려는 것입니다. 그러니 제발 ........ –

2

환경 변수를 통해 액세스 할 수있는 내장 전역 변수 env (정규화 된이 ::env입니다). 이것을 다른 Tcl 배열처럼 사용하십시오. 예를 들어, 다른 배열처럼 사용하는 단 하나의 변수에 액세스 물론

proc dump_env_vars {} { 
    foreach name [array names ::env] { 
     puts "$name == $::env($name)" 
    } 
} 

, : 모든 환경 변수의 목록을 인쇄하려면

은이 같은 것을 사용할 수 있습니다

을 자세한 내용은
puts "HOME = '$::env(HOME)'" 

env page on the Tcler's wiki

+0

예, 프로 시저가 실행되면 모든 환경 변수가 제공됩니다. 괜찮아. 그러나 내가 여기서 묻고있는 것. ORACLE_SID = DBTEST ORACLE_HOME =/opt/oracle/product/102 export ORACLE_SID ORACLE_HOME 이제 사용자가 정의한 환경 변수에 액세스하기 위해 tcl에 proc을 작성하려고합니다. 그래서 어떻게해야합니까? 제발 .......... –

+0

나는 또한 링크를 읽었습니다. 하지만 내 요구 사항과 일치하지 않습니다. –

+0

환경 변수를 덤프 할 때'parray env' 만 사용합니다. –

1

the env section of the tclvars man page은 Tcl의 스크립트에서 쉘 환경 변수를 읽으려면 참조 이이 방식으로도 표현 될 수

global env 
set olddisplay $env(DISPLAY) 
set env(DISPLAY) unix:0 

:

set olddisplay $::env(DISPLAY) 
set ::env(DISPLAY) unix:0 

을 약 global을 잊지 같은 일을하려고합니다.

당신은 변수가 같은 것을 수행하여 존재하는지 확인할 수 있습니다

if {[info exists env(VARNAME)]} { 
    # okay, it's there, use it 
    set value $env(VARNAME) 
} else { 
    # the environment var isn't set, use a default 
    set value "the default value" 
} 

source입니다.