BASH意外的EOF

时间:2011-03-20 03:20:48

标签: bash eof


我的Mac在最后一行告诉我这个bash脚本的意外文件结尾。我不是编程的新手,但对BASH来说很新,有没有人看到这个有什么问题?

#!/bin/bash  
#bootstrapper.sh
PIDD="$5"
while sleep 1; do kill -0 $PIDD || break; done
# Absolute path to this script. /home/user/bin/foo.sh
SCRIPT=$(readlink -f $0)
# Absolute path this script is in. /home/user/bin
SCRIPTPATH=`dirname $SCRIPT`
POSPAR1="$1" #-l
POSPAR2="$2" #location
POSPAR3="$3" #-d
POSPAR4="$4" #directory
cp -r -f $SCRIPTPATH/$4/* $2
rm -r -f $SCRIPTPATH/$4

提前谢谢!

2 个答案:

答案 0 :(得分:2)

我从Mac上的问题处理你的代码(copy'n'paste)并运行文件:

bash -n -v x.sh

事实上,我做了两次;第一次,我确保文件末尾有换行符,第二次确保没有换行符。 bash两次都很开心。

这向我表明问题不在于可见字符;文件中有一些不可见的字符导致悲伤。您可能需要使用od -c等工具仔细检查文件,以找到导致问题的字符。

另外,FWIW,Mac上的readlink命令给出:

$ readlink -f $0
readlink: illegal option -- f
usage: readlink [-n] [file ...]
$

readlink的Linux版本需要-f。它不是POSIX命令,因此没有 de jure 标准可供参考。

答案 1 :(得分:0)


用od -c分析文件显示行结尾是\ r \ n,我确实修改了一个Windows文件,傻了我。无论如何,我在使用BASH脚本时遇到了另一个问题。这一行:

while sleep 1; do kill -0 $PIDD || break; done

应该等到PID(存储在变量$ PIDD中)关闭。它等待直到它不存在(PID),但是当它最终不存在时,它输出:kill:4:没有这样的过程。脚本的其余部分按预期工作,但脚本不会终止。我可以使脚本正确终止而不是没有输出这样的过程吗? 对于所有新手问题我很抱歉,我在BASH和Linux上很糟糕 再次感谢您的帮助。