gpt4 book ai didi

tcsh if/then 语句出错

转载 作者:行者123 更新时间:2023-12-03 23:56:21 25 4
gpt4 key购买 nike

我正在尝试执行一个简单的 tcsh 脚本来查找文件夹,然后导航到该文件夹​​(如果存在)。该语句正确评估,但如果它评估为假,我会收到错误“then: then/endif not found”。如果它评估为真,没问题。我哪里错了?

#!/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 已在 elswehere 中初始化,但无论哪个变量为空,我都会收到错误消息)

最佳答案

问题是tcsh 需求让每一行都以换行符结尾,包括最后一行;它使用换行符作为“行终止符”,如果它错过了它就会出错。

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

$ 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 作为最后一个字符(由 . 表示):
$ 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 默认不执行此操作,但几乎所有编辑器都有一个可以启用此设置的设置。

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

关于tcsh if/then 语句出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46104636/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com