Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux Bash EOF具有意外的行为_Linux_Bash_Eof - Fatal编程技术网

Linux Bash EOF具有意外的行为

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

我使用了一个快速而肮脏的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 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