脚本未按预期执行

May*_*ain 3 scripting tcsh path

我在 Unix 中的预定义位置有两个 Perl 脚本。此预定义位置在路径变量 ( $PATH) 中设置。现在,当我尝试运行第一个脚本(从任何位置)时,该脚本成功运行,而第二个脚本(与前一个脚本的路径相同)会引发错误提示

ScriptB: Command not found
Run Code Online (Sandbox Code Playgroud)

我的 shell 是 tcsh 并且授予两个脚本的权限是相同的。

这种错误行为的可能原因是什么?

cjm*_*cjm 5

ScriptB 有 CRLF 行结尾。由于内核不支持 CRLF,它试图执行一个名为"/path/to/bin/perl\r"(其中\r表示 CR)的程序。那个程序不存在。将 ScriptB 转换为 LF 行尾。(感谢斯蒂芬Chazelas正确的问题,该\rsed输出指示的问题。)

sed l\;q FILE运行 2 个 sed 命令(用分号分隔,需要转义,因为它也是一个 shell 元字符)。来自man sed

l  List out the current line in a "visually unambiguous" form
q  Immediately quit the sed script without processing any more input,
   except that if auto-print is not disabled the current pattern space will be printed.
Run Code Online (Sandbox Code Playgroud)

因此l,以一种使 CR 等通常隐藏的字符可见的格式打印第一行,然后q在第一行之后退出。