【发布时间】:2013-06-30 06:43:40
【问题描述】:
我正在处理一个文件处理项目,我正在尝试在 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
【问题讨论】:
-
./something(将当前目录指定为查找内容的位置)和. something(在当前 shell 中运行某些内容而不是作为子进程)都有意义。./ something无效。 -
...顺便说一下,您的脚本无效,因为它有一个
if而没有fi。您还需要引用您的扩展,并且不应该使用$?- 这里没有意义。if ! java ...; then ...; fi就足够了,没有理由存储$RET。此外,对环境变量和内置函数以外的任何内容都使用大写字母是不好的形式。 (依靠字符串拆分让人们传入参数列表是尤其是不好的形式,但它在启动 Java 应用程序的脚本中几乎无处不在......几乎所有这些都是由没有使用过的人编写的关于 shell 的一点点线索)。 -
在我的辩护中,我根据公司构建中类似过程的类似脚本建模了我的脚本,所以请原谅我的任何不良形式。
标签: bash shell unix scripting putty