![脚本未按预期执行](https://linux22.com/image/31957/%E8%84%9A%E6%9C%AC%E6%9C%AA%E6%8C%89%E9%A2%84%E6%9C%9F%E6%89%A7%E8%A1%8C.png)
我在 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
在第一行之后退出。