2

谁能启发我为什么以下不起作用?

$ groups
  staff btgroup
$ ls -l
  total 64
  -rw-rw----    1 sld248   btgroup       26840 Apr 02 13:39 padaddwip.jks
  -rwxrwx---    1 sld248   btgroup        1324 Apr 02 13:39 padaddwip.ksh
$ ./padaddwip.ksh
  ksh: ./padaddwip.ksh:  not found.
$ echo $?
  127

这几乎与另一个运行良好的脚本相同。在权限或所有权方面,我看不出两者之间有任何区别。

4

4 回答 4

4

可能有2个问题:

  • Shebang 线是错误的(正如 ghostdog 所暗示的)

  • 该脚本是从 Windows 保存的,并具有 DOS 行结尾。

对于后者,做

head padaddwip.ksh | cat -vet | head -1

该命令应生成不以 . 结尾的 shebang 行^M^M如果它确实以 DOS 编码文件结尾,则修复方法是:

cp padaddwip.ksh padaddwip.ksh.bak
dos2unix padaddwip.ksh.bak > padaddwip.ksh
./padaddwip.ksh

在没有 dos2unix 的系统上,您可以使用

cat padaddwip.ksh.bak | tr -d "\r" > padaddwip.ksh
于 2010-04-14T14:21:40.690 回答
1

只是一个猜测,检查你的 shebang in padaddwip.ksh。它应该是这样的#!/bin/ksh。如果没有,请使用which ksh查看您ksh的安装位置。或者,您可以通过调用解释器(ksh)来执行您的脚本,例如

$ /bin/ksh padaddwip.ksh

您可以做的另一种方法是将您的shebang更改为#!/usr/bin/env ksh

另外,确保执行脚本的用户的主要组为btgroup

于 2010-04-14T14:03:43.177 回答
1

消除脚本中烦人^M字符的另一种方法是在 vi 中打开文件并键入:%s/^M//g(在 vi 中的 sed),^M这里是通过键入Ctrl-Vthen创建的Ctrl-M。我个人喜欢这种方法,因为您不需要创建备份文件并且您可以立即看到结果——这只是我的强迫症习惯——

此外,我在使用tr和控制字符方面遇到了一些奇怪的问题,例如\r它可能是 shell 或特定于站点的问题,但在这种情况下,我需要使用上述方法或 sed 从命令行...非常类似于上面 DVK 显示的内容;就像你在sed -e 's/^M//g' padaddwip.ksh.bak > padaddwip.ksh哪里创建的^M那样(在 vi 编辑器模式下)。Ctrl-VCtrl-M

于 2010-04-14T21:51:24.293 回答
0

shebang很糟糕。

在 cmdline 上使用 shell 解释器测试场景。

ksh padaddwip.ksh
于 2010-04-26T07:02:22.113 回答