Linux Bash EOF具有意外的行为
我使用了一个快速而肮脏的BASH脚本来自动化CF分区过程。 在我想添加之前,它一直运行良好 基本上,我有一个脚本,它将紧凑型闪存划分为:Linux Bash EOF具有意外的行为,linux,bash,eof,Linux,Bash,Eof,我使用了一个快速而肮脏的BASH脚本来自动化CF分区过程。 在我想添加之前,它一直运行良好 基本上,我有一个脚本,它将紧凑型闪存划分为: CMD=.fdisk DEV=/dev/sdc echo "Calculating partition sizes..." P1SIZE=+1100M P2SIZE=+1200M echo "Creating instruction file..." PT1="n p 1\n $P1SIZE" PT2="n p 2\n $P2SIZE" END="a 1
CMD=.fdisk
DEV=/dev/sdc
echo "Calculating partition sizes..."
P1SIZE=+1100M
P2SIZE=+1200M
echo "Creating instruction file..."
PT1="n p 1\n $P1SIZE"
PT2="n p 2\n $P2SIZE"
END="a 1 w EOF\n"
[ -e $CMD ] && rm -rf $CMD
for i in $PT1 $PT2 $END; do echo -e $i >> $CMD; done
echo "Creating partitions..."
fdisk $DEV << EOF < $CMD
[ -e $CMD ] && rm -f $CMD
此外,我还意识到,“fdisk”命令之后的任何附加代码都不会执行,脚本似乎只是简单地终止而没有错误,$?=0
有人知道为什么函数不起作用而脚本终止吗?您已经启动了一个heredoc经验法则是您使用的“限制字符串”在我的例子中使用了“EOF”,但是您可以使用任何您想要的东西,前面不能有空格或制表符。如果是这样,就不会被认为是结束 例如:
myFunction() {
cat << EOF
Hello
World
EOF
}
myFunction() {
cat <<- EOF
Hello
World
EOF
}
上面的“EOF”被认为是常规文本,因为它前面有空格!如果您编写以下内容:
myFunction() {
cat << EOF
Hello
World
EOF
}
它现在可以工作了
如果您坚持使用空格,则可以通过在“我明白我现在做错了什么!”的右边使用“-”字符来抑制制表符!虽然我的命令文件中有“EOF”限制字符串,但bash希望在该特定脚本中找到它,而不是在其他地方。我写了一个答案,描述了如何使它在我的情况下工作。谢谢你指出这一点!由下议院选民驾驶是一件令人讨厌的事,但确实发生了;最好去适应它。如果你认为自己受到了很多反对票的攻击,请联系团队或询问meta。他们可能是一个失败者,他们的反对票可能比你希望的要少,但你最好忽略他们。很伤心,但也是这样。哇,在我看到这篇帖子之前,我还以为我疯了呢。删除任何以EOF为前缀的空格解决了我的意外文件结束错误。
myFunction() {
cat <<- EOF
Hello
World
EOF
}
cat << "EOF"
Type `ls -la` at the command prompt
EOF