我正在处理一个文件处理项目,我正在尝试在PuTTY中运行一个名为runProcessing.sh的shell脚本。服务器使用ksh。我的主管告诉我在执行脚本时使用./ runProcessing.sh <param1> <param2>
,但每当我使用./时,它都会显示cannot execute
或file not found
。每当我输入runProcessing.sh
时,它都会返回空指针异常,我一直在努力继续我的任务。
我理解./在运行脚本时会做什么,但是当我尝试使用它运行脚本时,我不确定它为什么不起作用。任何提示或建议?我是Linux / UNIX的新手。
这是我的剧本:
#!/bin/ksh
#
# Script to download processing files from the appropriate target
#
# $Id: runProcessing.sh 604 2013-01-14 21:56:35Z alex_rempel $
#
DIR=`dirname $0`
. $DIR/setEnvironment.sh
java $LDAPRUNMODE $JAVAOPT com.webproject.db.processing.FPJob --logdir $CISLOGDIR --file [2] $*
RET=$?
if [ $RET -gt 0 ]
then
echo
echo
echo "------ runProcessing.sh Failed ------"
echo
echo
exit $RET
答案 0 :(得分:2)
空指针异常来自您的Java程序,因此它们意味着该进程实际上已经启动。它们通常不表示shell脚本或其调用存在问题。
. something # this reads the file `something`, running each line as a command
# in your current shell. (Actual behavior is a bit more sophisticated
# than that, but it's close enough).
./something # this tries to run the file `something` in the current directory as
# an executable. It doesn't need to be a shell script -- it can be
# any kind of executable, and if it has a shebang line, that will be
# honored to determine the interpreter or shell to use.
./ something # <- this is simply invalid.
也就是说,您可以通过启动它来准确记录脚本运行的命令:
ksh -x ./something
这将显示脚本运行的命令。如果错误是由错误地启动JVM的脚本引起的,那么您可以确定预期和实际调用的不同。
答案 1 :(得分:1)
由于您在ksh环境中运行,因此您可以选择使用./运算符。
您可以通过将其作为参数传递给ksh来执行它,而不是使您的脚本成为可执行文件,如下所示:
ksh yourScript
在Unix / Linux中创建文件时,不会自动获得执行权限。因此,您也可以使用chmod
修改脚本的权限:
chmod +x yourScript
然后您应该能够执行您的脚本。