sudo 重定向在函数中不起作用

sudo 重定向在函数中不起作用

cat我有一个脚本,它将一些内容写入带有和 的文件中EOF。虽然这个东西可以在 bash 脚本中工作,但如果我把它放在函数中,它就不起作用。

工作代码:

cat << EOF | sudo tee /etc/network/interfaces
auto lo
iface lo inet loopback

auto eth0
iface eth0 inet dhcp
EOF

它是语法高亮(看起来不错);

在此输入图像描述

不起作用的代码:

function someFunctions {
    cat << EOF | sudo tee /etc/network/interfaces
    auto lo
    iface lo inet loopback

    auto eth0
    iface eth0 inet dhcp
    EOF
}

someFunctions

这个的语法高亮(看起来不太好);

在此输入图像描述

我的编辑器(Atom)将所有内容显示为绿色,这意味着它失去了语法突出显示,但我找不到问题所在。

我怎样才能解决这个问题?

答案1

Here EOF-doc 标记必须要么位于行首,要么缩进完整的制表符:

someFunctions {
        sudo tee /etc/network/interfaces <<-'EOF'
        auto lo
        iface lo inet loopback

        auto eth0
        iface eth0 inet dhcp
        EOF
}

我已经删除了该function关键字,因为它已被弃用,并且cat它没有增加任何价值。我还使用了<<-'EOF'( 而不是<<EOF) ,以便删除前导 TAB 字符,并且不会评估此处文档的内容以查找变量和其他替换。如果您想要变量替换,请不要引用EOF, 而是使用<<-EOF.

相关内容