2012-11-12 3 views
4

tcl 스크립트에서 csh 스크립트를 실행하려고합니다.tcl 스크립트에서 csh 스크립트를 실행하려면 어떻게해야합니까?

Tcl의 스크립트는 아래의 CSH 스크립트

#!/usr/bin/tclsh 


set scripts_path /scratch/TCL_scripts/scripts_adders 

set synthesis /scratch/TCL_scripts/synthesis.csh 


set files [glob -directory $scripts_path *] 
split $files 
set files [lsort $files] 
set i 1 

foreach script $files { 

    puts "hello" 
    # puts [pwd] 
    exec /bin/csh -c $synthesis 
    puts $i 

} 

통화 및 CSH 파일 (의 태초는) 다음과 같습니다 :

#!/bin/csh -f 


echo abcdefgh 

난 단지 내 유닉스 터미널에서 CSH 파일을 실행하면, 그것은 잘 작동합니다. Tcl 스크립트를 호출하면 실행되고 "hello"를 쓰고 i를 인쇄하지만 "abcdefgh"이 터미널에 나타나지 않기 때문에 csh 파일이 실행되지 않습니다. 나는 또한 다른 명령을 시도했다. 그리고 나는 항상 같은 문제가있다. 터미널에서 직접 실행할 때 잘 실행 되더라도, Tcl 스크립트에서 실행할 때 csh 스크립트는 실행되지 않는다.

(모두 내 Tcl의 스크립트 CSH 스크립트가 실행됩니다 ANS) 내 Tcl의 스크립트에서 내 CSH 스크립트를 실행하기 위해 무엇을해야

?

당신에게 대단히 감사합니다

+0

부수적으로 [split $ files]에 대한 호출은 관련이 없습니다. 첫째, split은 split리스트를 반환하고 결과를 저장하지 않습니다. 둘째, glob가 이미 파일 이름을 목록으로 반환하기 때문에 문자열로 처리하고 분할하면 그 파일 이름에 공백이있는 파일 이름이 깨어집니다. – RHSeeger

답변

5

CSH 스크립트는 실제로 당신을 위해 실행되지만 기본적으로 표준 출력은 결과 티클 exec 명령의 (그리고 표준 오류에 아무것도를 생산하는 경우, 즉 될 것이다된다 오류exec의 결과).

exec /bin/csh -c $synthesis >@stdout 2>@stderr 
>@ (이 경우 stdout) "다음 채널로 표준 출력을 리디렉션"라고

하고 2>@가 수행합니다 출력과 오류가 단말기에 표시되도록하려면이 같은 exec을 수정해야 표준 오류와 동일합니다.

+0

고마워. 그게 잘 됐어! – Percy

+1

'puts [exec ...]'도 할 수 있었지만, 내가 제안한 것이 당신이 원했던 것 같아요. –

+0

exec의 "오류 결과"는 어디에서 끝나나요? – Scooter

관련 문제