How can I run a csh script from a tcl script?

会有一股神秘感。 提交于 2019-12-07 08:29:05

问题


I am trying to run a csh script from a tcl script.

The tcl script below calls a csh script

#!/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

}

And the (begining of the) csh file is below:

#!/bin/csh -f


echo abcdefgh

When I only execute the csh file from my unix terminal, it works fine. When I call my Tcl script, it runs and indeed writes "hello" and prints i, but the csh file is not executed because "abcdefgh" never appears in the terminal. I have also tried other commands, and I always have the same problem: the csh script is never executed when I run it from a Tcl script, even though it runs fine when I run it directly from the terminal.

(Both my Tcl script ans csh script are executable)

What must I do in order to run my csh script from my Tcl script ?

Thank you very much


回答1:


The csh script is indeed run for you, but by default its standard output becomes the result of the Tcl exec command (and if it produced anything on standard error, that would become an error result of the exec). To make the output and error appear on the terminal, you have to modify the exec like this:

exec /bin/csh -c $synthesis >@stdout 2>@stderr

The >@ says “redirect standard output to the following channel” (stdout in this case), and the 2>@ does the same for standard error.



来源:https://stackoverflow.com/questions/13341427/how-can-i-run-a-csh-script-from-a-tcl-script

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!