8

当我从 Linux(RH Linux 6.2)执行脚本时,它给出了 not found [No such file or directory] ​​错误,即使该文件存在于该目录中(检查了权限并且它们很好)。

例子:

md1silinux04:/data/upgrade> /data/upgrade/upgrade_db.ksh
-ksh: /data/upgrade/upgrade_db.ksh: not found [No such file or directory]

md1silinux04:/data/RAIL/rpo402/db/upgrade> ls /data/upgrade/upgrade_db.ksh
/data/upgrade/upgrade_db.ksh

有人可以帮忙吗?

4

5 回答 5

9

也许您在文件的每一行末尾都有 ctrl-M(回车)。

查看: cat -v /data/upgrade/upgrade_db.ksh

修理: perl -p -i -e "s/\r//g" /data/upgrade/upgrade_db.ksh

于 2013-11-07T21:12:51.060 回答
0

输入这个:

ls -ls /data/RAIL/rpo402/db/upgrade

列出文件的输出并查看它的权限。

确保文件不为空。确保该文件具有作为 shell 执行的权限。

chmod +x upgrade_db.ksh

查看文件的第一行,确保它有一个正确的 shell 脚本头。也许 Korn Shell 需要在标头中声明 shell。

检查 dmesg 以查看是否有任何错误消息,可能是文件系统和检查 inode。

于 2013-08-08T12:15:03.727 回答
0

试试这些:

  • ksh /data/upgrade/upgrade_db.ksh

或者当您拥有当前目录时,数据/升级/

  • . ./upgrade_db.ksh
于 2018-03-09T09:41:07.227 回答
0

虽然不太可能是 OP 的问题,但如果您的 shebang 具有该角色,则可能会出现一个足够相似的错误消息 - 它把我带到这里。在我的情况下,脚本仍然执行,但错误非常烦人 - 特别是因为我正在帮助某人完成他们的“官方”程序并且在这种情况下错误是不受欢迎的。

示例输出:

CS-015: # /bin/ksh check.sh  
check.sh[1]: #!/bin/ksh: cannot execute - No such file or directory
check.sh

由于 cat 显示为:

$ cat check.sh
#!/bin/ksh

THIS_SCRIPT="$(basename $0)"

echo "$THIS_SCRIPT"
exit 0
# Nothing else matters; I had narrowed it to here...

在这种情况下,我继承了该文件并且 hexdump 显示:

$ hexdump -C check.sh
00000000  ef bb bf 23 21 20 2f 62  69 6e 2f 6b 73 68 0a 0a  |...#! /bin/ksh..|
00000010  54 48 49 53 5f 53 43 52  49 50 54 3d 22 24 28 62  |THIS_SCRIPT="$(b|
...

正如Stéphane Chazelashttps://unix.stackexchange.com/a/381263/17300建议的那样,您可以使用 sed 删除它:

$ sed -i '1s/^\xEF\xBB\xBF//' check.sh
于 2018-12-08T19:46:42.417 回答
0

我今天遇到了同样的问题。

-ksh: line 24: run-pipeline: not found

我浏览了帖子,但找不到解决方案/解释,我检查了这些:

  • 文件肯定存在
  • $PATH 包含文件所在的路径
  • 我也尝试了其他 shell (bash)
  • 文件不包含奇怪的字符(dos2unix、cat -v)
  • 没有权限问题(chmod +x 和 sudo)

原来是文件第一行的路径太长了:

#!/extremely/long/path/that/was/more/than/128/chars/long/python3.6
def rest_of_the_script():

将 python3.6 移动到更短的路径(少于 128 个字符),一切正常!

于 2020-02-06T23:29:20.257 回答