首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >tcsh if/tcsh语句会出现错误

tcsh if/tcsh语句会出现错误
EN

Stack Overflow用户
提问于 2017-09-07 20:31:02
回答 1查看 3K关注 0票数 4

我正在尝试执行一个简单的tcsh脚本来查找文件夹,如果它存在,则导航到它。该语句计算正确,但如果它的计算值为false,则会得到一个错误:“然后/endif未找到”。如果它评估为true,则没有问题。我哪里出问题了?

代码语言:javascript
复制
#!/bin/tcsh
set icmanagedir = ""
set workspace = `find -maxdepth 1 -name "*$user*" | sort -r | head -n1`
if ($icmanagedir != "" && $workspace != "") then
  setenv WORKSPACE_DIR `readlink -f $workspace`
  echo "Navigating to workspace" $WORKSPACE_DIR
  cd $WORKSPACE_DIR
endif

($icmanagedir是在这里初始化的,但是不管哪个变量是空的,我都会得到错误)

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-09-08 20:52:44

问题是,tcsh 需要在换行符中将每一行结束,包括最后一行;它使用换行符作为“行终止字符”,如果遗漏了,就会出错。

您可以使用十六进制编辑器/查看器来检查文件是否以换行符结尾:

代码语言:javascript
复制
$ hexdump -C x.tcsh                                                  i:arch:21:49
00000000  69 66 20 28 22 78 22 20  3d 20 22 78 22 29 20 74  |if ("x" = "x") t|
00000010  68 65 6e 0a 09 65 63 68  6f 20 78 0a 65 6e 64 69  |hen..echo x.endi|
00000020  66                                                |f|

这里是最后一个字符if f (0x66),而不是换行符。正确的文件将0x0a作为最后一个字符(由.表示):

代码语言:javascript
复制
$ hexdump -C x.tcsh    
00000000  69 66 20 28 22 78 22 20  3d 20 22 78 22 29 20 74  |if ("x" = "x") t|
00000010  68 65 6e 0a 09 65 63 68  6f 20 78 0a 65 6e 64 69  |hen..echo x.endi|
00000020  66 0a                                             |f.|

用换行符结束文件中的最后一行是一个常见的UNIX习语,一些shell工具希望这样做。有关此问题的更多信息,请参见What's the point in adding a new line to the end of a file?

大多数UNIX编辑器(如Vim、Nano、Emacs等)默认情况下应该这样做,但是一些编辑器或IDE默认不会这样做,但是几乎所有的编辑器都有一个可以启用此设置的设置。

最好的解决方案是在编辑器中启用此设置。如果您不能这样做,那么在最后添加一个空行也可以解决您的问题。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46104636

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档