Cygwin TCL/TCLSH没有这样的文件或目录

Cygwin TCL/TCLSH没有这样的文件或目录,cygwin,tcl,Cygwin,Tcl,我正试图在Windows7上构建一个名为Slicer3的软件,它的特点是“超级构建”。 这是一个用于签出和构建Slicer3的多功能TCL脚本 我运行CYGWIN并导航到正确的目录,然后运行脚本并获得: $ ./Slicer3-svn/Scripts/getbuildtest.tcl couldn't read file "./Slicer3-svn/Scripts/getbuildtest.tcl": no such file or directory 显然,我确信该文件存在,并且我授予了它

我正试图在Windows7上构建一个名为Slicer3的软件,它的特点是“超级构建”。 这是一个用于签出和构建Slicer3的多功能TCL脚本

我运行CYGWIN并导航到正确的目录,然后运行脚本并获得:

$ ./Slicer3-svn/Scripts/getbuildtest.tcl
couldn't read file "./Slicer3-svn/Scripts/getbuildtest.tcl": no such file or directory
显然,我确信该文件存在,并且我授予了它777权限。我以管理员的身份运行cygwin

tcl文件内容的开头是:

#!/bin/sh
# the next line restarts using tclsh \
exec tclsh "$0" "$@"
所以我试着对第3行进行注释并直接运行

$ tclsh ./Slicer3-svn/Scripts/getbuildtest.tcl
但也犯了同样的错误。
有什么想法吗?

我会尽可能多地帮助排除故障:

确定是否已安装tclsh,并且它位于以下路径中:

$ tclsh
确定tclsh是否适用于简单脚本:

$ echo puts hello > hello.tcl; tclsh hello.tcl
确定脚本是否存在且可读:

$ cat ./Slicer3-svn/Scripts/getbuildtest.tcl
$ cd ./Slicer3-svn/Scripts
$ cat getbuildtest.tcl
就行结束而言(DOS CRLF与Unix LF):


这样,如果任何步骤失败,我们都可以缩小问题的范围。

说明:Tlsh无法读取文件:没有这样的文件或目录。 可能原因:CYGWIN下的TCLSH无法正确解析windows路径,并且找不到文件。 解决方法:在CYGWIN路径内移动脚本


只需将脚本移动到“更简单”的路径就可以了。我不太清楚原因,也不知道如何解决这种错误行为。

请仔细检查:您使用的是Tcl的cygwin版本?如果不是,您将需要一个windows样式的文件名(用反斜杠而不是正斜杠)。是否可以cat./Slicer3 svn/Scripts/getbuildtest.tcl?在cygwin上可能不重要,但tcl脚本是否以Dos格式(\r\n行尾)而不是unix(\n行尾)保存?我也想知道行的结尾。1)OK$tclsh%2)OK$echo puts hello>hello.tcl;tclsh hello.tcl%hello 3)cat打印文件,在这两种情况下4)我首先需要chmod 777 getbuildtest_new.tcl,但结果是sameI可以禁用脚本的第三行:#exec tclsh“$0”“$@”,因此它将被解释为tcl。结果:$./Slicer3/Scripts/getbuildtest.tcl./Slicer3/Scripts/getbuildtest.tcl:第25行:未找到proc:command./Slicer3/Scripts/getbuildtest.tcl:第26行:未找到全局:command./Slicer3/Scripts/getbuildtest.tcl:第60行:未找到命令。/Slicer3/Scripts/getbuildtest.tcl:第61行:预期标记“}”附近的语法错误应为,因为这些不是TCL命令。至少文件存在并且可读!我在windows上的脚本路径是:C:\Users\Hugues\Documents\DEV\LIB\Slicer\Slicer3\Scripts从cygwin看到的我的脚本路径是:$pwd/cygdrive/C/Documents and Settings/Hugues/My Documents/DEV/LIB/Slicer/Slicer3/Scripts从Tcsh shell看到的我的脚本路径是:$tclsh%pwd C:/Documents and Settings//My Documents//LIB Slicer/Slicer/Slicer3/Scripts(注意双//和缺少的目录)当我运行tclsh并以交互方式运行脚本时:$cd Slicer3/Scripts$tclsh%exec getbuildtest.tcl无法执行“getbuildtest.tcl”:没有这样的文件或目录,因此它似乎与相对路径和绝对路径有关,以及Tcsh尝试在CYGWIN文件树中读取某些内容的方式。我很正确,它与路径有关。我将整个内容移动到CYGWIN中的\home,Tcsh找到了脚本。
$ cd ./Slicer3-svn/Scripts
$ sed 's/\r\n/\n/g' getbuildtest.tcl > getbuildtest_new.tcl
$ tclsh getbuildtest_new.tcl