Shell脚本不执行

Shell脚本不执行

不确定发生了什么。

让我们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也可以使用它来转换文件。

相关内容