第54行:警告:here-document在第42行由文件结尾(想要的'EOF')分隔

时间:2014-11-29 09:59:15

标签: bash eof

我有bash脚本,但是当我运行它时出现了一些错误:

  

第54行:警告:此处 - 文档在第42行由文件结尾分隔(想要'EOF')

#!/bin/bash
echo "PODAJ IMIE"
read imie
echo  "PODAJ NAZWISKO"
read nazwisko

alias="$imie$nazwisko"
echo "$alias"


while [ 1 ]
do

        i=1

        if [ `egrep $alias /etc/passwd |wc -l` -gt 0 ]; then i=0
        fi

        if [ $i -eq 0  ]; then
                echo "Uzytkownik o podanym aliasie już istnieje!"
                echo "PODAJ INNY ALIAS np. "$alias"1"
                read alias

        else
                echo "PODAJ HASLO"
                read -s password
                echo "PODAJ NUMER POKOJU"
                read pokoj

                #adduser --disabled-password --gecos "$imie $nazwisko,$pokoj, ," $alias
                adduser --quiet --disabled-password -shell /bin/bash --home /home/$alias --gecos "$imie $nazwisko, $pokoj, , " $alias
                echo "$alias:$password" | chpasswd
                #echo -e "$haslo\n$haslo\n" | sudo passwd $alias


                dir=/home/$alias
                mkdir $dir/public_html
                mkdir $dir/samba
                cd $dir/public_html
                mkdir private_html

                cat <<EOF >>$dir/.bashrc

                echo "alias ps =/bin/ps"
                echo "alias ls =/bin/ls"
                t=\`date +%F.%H:%M:%S\`
                echo "WITAJ\n"
                echo "DZISIAJ MAMY:\$t"
                echo "TWOJE OSTATNIE LOGOWANIE:" && " lastlog -u \$USER | tail -n 1 | awk '{print       \$4" "\$5" "\$6" "\$7" "\$9}'"
                EOF

                break
        fi
done

3 个答案:

答案 0 :(得分:7)

EOF需要在一行的开头,之后没有任何内容(包括没有空格)。

该区块中的一些echo是怀疑。直到结束标记的文本将在变量替换后原样复制到文件中,而不是执行 - 并且它看起来不像你想要的替换。

试试这个:(注意"EOF"cat周围的引号)

            cat <<"EOF" >>$dir/.bashrc
alias ps=/bin/ps
alias ls=/bin/ls
t=$(date +%F.%H:%M:%S)
echo "WITAJ\n"
echo "DZISIAJ MAMY: $t"
echo "TWOJE OSTATNIE LOGOWANIE:" $(lastlog -u $USER | tail -n 1 | awk '{print       $4" "$5" "$6" "$7" "$9}')
EOF

答案 1 :(得分:6)

EOF分隔符需要在最左边的列中对齐。

这是我经常做的调整。

Lots
    Of
        Indents
            cat <<-____________HERE
                boo
____________HERE
        done
    done
done

答案 2 :(得分:5)

您也可以使用

     <Tab><Tab>cat <<-EOF >>$dir/.bashrc
#--------------------^- added a "-" char
     <Tab><Tab>  echo " ... "
     <Tab><Tab>  echo " ... "
     <Tab><Tab>EOF

其中EOF现在以-字符开头。这向shell指示关闭的Here-file标记将(可以)使用制表符缩进。如果您不小心写了<Tab><Tab><Space>EOF它将不匹配,但0,1,2,...,100 <Tab>EOF 匹配。

IHTH