任何人都可以告诉我为什么以下不起作用?
$ 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
这几乎与另一个工作得很好的脚本相同。在权限或所有权方面,我看不出两者之间存在任何差异。
答案 0 :(得分:4)
可能有两个问题:
Shebang线是错误的(正如鬼魂所暗示的那样)
脚本是从Windows保存的,并且有DOS行结尾。
对于后者,请
head padaddwip.ksh | cat -vet | head -1
该命令应该产生不以^M
结尾的shebang行。如果它以^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
答案 1 :(得分:1)
padaddwip.ksh
检查你的shebang。它应该是#!/bin/ksh
之类的东西。如果没有,请使用which ksh
查看ksh
的安装位置。或者,您可以通过调用解释器(ksh)来执行脚本,例如
$ /bin/ksh padaddwip.ksh
另一种方法是将你的shebang改为#!/usr/bin/env ksh
此外,请确保执行脚本的用户的主要组为btgroup
答案 2 :(得分:1)
另一种摆脱令人讨厌的^M
字符的脚本的方法是在vi中打开文件并输入:%s/^M//g
(在vi中sed),其中^M
这里是通过键入来创建的Ctrl-V
然后Ctrl-M
。我个人喜欢这种方法,因为你不需要创建一个备份文件,你可以立即看到结果 - 只是我的OCD习惯 -
此外,我在使用tr
和控制字符(如\r
时遇到了一些奇怪的问题,它可能是一个shell或特定于站点的问题,但在这种情况下,我需要使用上面的方法或从命令行sed ...非常类似DVK上面显示的;与sed -e 's/^M//g' padaddwip.ksh.bak > padaddwip.ksh
一样,您可以通过^M
然后Ctrl-V
创建Ctrl-M
(在vi编辑器模式下)。
答案 3 :(得分:0)
使用cmdline上的shell解释器测试场景。
ksh padaddwip.ksh