1


我的 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

先感谢您!

4

2 回答 2

2

我从 Mac 上的问题(copy'n'paste)中处理了您的代码,并使用以下命令运行文件:

bash -n -v x.sh

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

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

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

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

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

于 2011-03-20T03:40:23.490 回答
0


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

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

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

于 2011-03-20T23:44:24.030 回答