我正在尝试使用以下命令在Tcl中调用脚本:
exec source <script path>
我收到了错误
couldn't execute "source": no such file or directory
如何从tcl调用另一个脚本?
编辑:我正在运行我从办公室里的另一个人那里得到的命令。我被指示用source明确地运行“source”。换句话说,如何在Tcl中运行任何可以在cshell中运行的命令?
答案 0 :(得分:7)
如果你给出的脚本是一个cshell脚本,你可以像这样执行:
exec /bin/csh $path_to_script
实际上,这是'source'命令在交互式shell中的作用。目前尚不清楚这是否真的是你想要做的事情(不完全是,但足够接近这个讨论)。
你不能执行source命令的原因是exec只能处理可执行文件(因此名称为'exec')。 source命令不是作为exectuable文件实现的,它是内置于shell的命令。因此,它不能被执行。
如果你真的觉得需要执行source命令或任何其他内置命令,你可以这样做:
exec /bin/csh -c "source $path_to_script"
在上面的示例中,您正在执行c shell,并要求它运行命令“source”。对于source命令的特定情况,这实际上没有多大意义。
但是,我不确定这些是否会真正达到预期效果。通常如果有人说“这里有一些命令,只做'源',它通常只是在交互式shell中定义一些别名和什么东西。这些别名在Tcl中不起作用。
答案 1 :(得分:3)
source
与bash中的.
一样,执行脚本而不会生成新进程。
效果是该脚本中设置的任何变量在当前csh会话中都可用。
实际上,source
是csh的内置命令,因此无法从tcl exec
获得,并且使用不exec
的{{1}}将无法提供特定的{{} 1}}效果。
没有简单的方法可以解决您的问题。
答案 2 :(得分:1)
源码加载源文件
你应该这样做:
source <script path>
如果你想执行它,那么你需要调用主过程。
另一种选择是:
exec [info nameofexecutable] <scritp path>
答案 3 :(得分:1)
这里有些困惑。 exec 运行一个单独的程序,可能带有参数。 源不是一个单独的程序,它是另一个Tcl命令,它读取Tcl命令的文件并执行它们,但不传递参数。如果您尝试调用的另一个脚本被编写为从命令行运行,它将期望在变量argv中将其参数作为列表查找。你可以通过在运行source之前将argv设置为参数列表来伪造这一点,例如
set argv {first_arg second_arg}
source script_path
或者你可以使用exec启动一个完整的单独的Tcl可执行文件并将脚本和参数传递给它:
exec script_path first_arg second_arg
答案 4 :(得分:0)
错误说明了一切。确保提供正确的路径名,必要时指定完整路径。并确保该目录中确实存在该文件
答案 5 :(得分:0)
最近我想通过获取shell脚本来设置一些UNIX环境变量,并偶然发现了同样的问题。我发现这个简单的解决方案非常适合我:
在启动Tcl脚本之前,只需使用一个在UNIX shell 中执行source命令的3行包装器脚本。 例如:
#!/bin/csh
source SetMyEnvironment.csh
tclsh MyScript.tcl