“exec source <script>”在tcl </script>中不起作用

时间:2010-02-22 14:57:52

标签: unix tcl csh

我正在尝试使用以下命令在Tcl中调用脚本:

exec source <script path>

我收到了错误

couldn't execute "source": no such file or directory

如何从tcl调用另一个脚本?

编辑:我正在运行我从办公室里的另一个人那里得到的命令。我被指示用source明确地运行“source”。换句话说,如何在Tcl中运行任何可以在cshell中运行的命令?

6 个答案:

答案 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)

csh中的

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