Bash

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

  • March 8, 2019

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)將所有內容顯示為綠色,這意味著它失去了語法高亮,但我找不到問題所在。

我怎樣才能解決這個問題?

EOFhere-doc 標記必須位於行首,或者縮進一個完整的 TAB 字元:

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 字元,並且不會針對變數和其他替換評估 here-doc 的內容。如果您想要變數替換,請不要引用EOF,<<-EOF而是使用。

引用自:https://unix.stackexchange.com/questions/505185