不确定发生了什么。
让我们a.sh
使用以下命令调用脚本
/users/guru$ cat a.sh
#! /usr/bin/ksh
echo "Hello"
date
执行与ksh
.事情就完成了。
/users/guru$ ksh a.sh
Hello
Tue Jul 15 15:00:52 EDT 2014
确保文件权限和ksh
路径。
/users/guru$ ls -l a.sh
-rwxrwxrwx 1 guru kpc 35 Jul 15 15:00 a.sh
/users/guru$ a.sh
ksh: a.sh: not found
/users/guru$ which ksh
/usr/bin/ksh
答案1
尝试执行时尝试“./a.sh”。它需要知道文件在哪里。
“./”告诉它在当前目录中查找。
答案2
当您键入命令时,shell 会从变量指定的目录列表中查找该命令PATH
。
默认情况下,当前目录不在其中PATH
(出于安全原因),因此 shell 无法找到您的脚本。
使用./
,表示当前目录,因此 shell 知道您的脚本在哪里。
答案3
正如我在另一个问题中发布的那样,有时即使您将脚本执行为./scriptname
.正如我在其他帖子中发布的回答,你可以在你的机器上测试一下。
测试
cat ksh_experiment.ksh
#!/usr/bin/ksh
echo "Hello"
现在,在我运行文件时提供权限后,它成功生成了输出。现在正如所讨论的这里,我在文件中插入了一些回车符。现在,当我运行脚本时,我得到的输出为,
ksh: ./ksh_experiment.ksh: not found [No such file or directory]
现在,cat -v ksh_experiment.ksh
也产生了相同的输出。另外,如果我输入vim ksh_experiment.ksh
,则会打开一个新文件。
正如我提供的链接的答案中所讨论的,我使用以下命令删除了回车符,
perl -p -i -e "s/\r//g" ksh_experiment.ksh
当我运行时修复后,我得到了预期的输出。
现在,您dos2unix
也可以使用它来转换文件。