我有一个简单的文件,如下所示。当我在 shell 中输入每个命令时,它可以工作,但是当我在脚本中编译它们时,它却不行 - 产生错误 - 未找到文件或目录,如下所示
我似乎不明白为什么会这样
#!/bin/tcsh -f
set curdir = `pwd`
echo $curdir
set default = `find $curdir -name "*.metadb" `
echo $default
exit
命令行中的屏幕截图
答案1
这条信息…/test\r': No such file or directory
让我怀疑至少线
set curdir = `pwd`
脚本中包含尾随回车符。请参阅以下类似问题:我为什么会得到line 1: $' :\r': command not found
?
当手写打字的时候,你自然不会输入这个字符*。
角色是错误的,X
就像
set curdir = `pwd`X
用于dos2unix thescript
修复脚本。链接问题下有更多方法。为了完整起见,这里有一个可移植的方法:
tr -d '\r' <thescript >script.new && mv script.new thescript
(这将删除所有回车符任何地方在脚本中。
以后不要让 Windows 行尾污染你的脚本。如果你在某些 Windows 文本编辑器中编辑脚本,请确保它使用\n
特定于 Unix,不\r\n
特定于 Windows在某些情况下,通过 FTP 传输文件可能会添加回车符(示例和见解:这里)。
*实际上你很可能这样做。你Enter可能发送了\r
,但最终它还是会被 shell 解释为“执行命令行”。实际上你并没有\r
在命令行中输入。另一方面,\r
你的脚本中的 并不是这样解释的。在脚本中只\n
终止一行。