脚本未按预期执行

脚本未按预期执行

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

ScriptB: Command not found

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

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

答案1

ScriptB 有 CRLF 行结尾。由于内核不支持 CRLF,因此它尝试执行名为"/path/to/bin/perl\r"(其中\r表示 CR)的程序。该程序不存在。将 ScriptB 转换为 LF 行结尾。 (感谢斯蒂芬·查泽拉斯为了询问正确的问题。输出\r中的表明sed问题所在。)

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.

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

相关内容