shell cat EOF 变量自动解析问题

Posted fsckzy

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了shell cat EOF 变量自动解析问题相关的知识,希望对你有一定的参考价值。

使用如下shell安装node时,一直提示 command not found

wget https://mirrors.huaweicloud.com/nodejs/latest-v8.x/node-v8.16.0-linux-x64.tar.gz
tar zxvf node-v8.16.0.tar.gz -C /usr/local
cd /usr/local/
mv node* node
cat <<EOF> /etc/profile.d/node.sh
export NODE_HOME=/usr/local/node
export PATH=$NODE_HOME/bin:$PATH
EOF

source /etc/profile

去检查 node.sh 才发现变量被解析了。

#cat /etc/profile.d/node.sh 
export NODE_HOME=/usr/local/node
export PATH=/usr/local/node/bin:/usr/local/node/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/usr/local/redis/bin/:/root/bin

两个解决办法:

  1. 加转义字符,适用于变量少的情况
[[email protected] ~]# cat <<EOF> /etc/profile.d/node.sh
> export NODE_HOME=/usr/local/node
> export PATH=\$NODE_HOME/bin:\$PATH
> EOF
[[email protected] ~]# cat /etc/profile.d/node.sh 
export NODE_HOME=/usr/local/node
export PATH=$NODE_HOME/bin:$PATH

? 2. EOF 加反斜杠,或用单引号、双引号包围 。适用变量多的情况

[[email protected] ~]# cat <<'EOF'> /etc/profile.d/node.sh
> export NODE_HOME=/usr/local/node
> export PATH=$NODE_HOME/bin:$PATH
> EOF
[[email protected] ~]# cat /etc/profile.d/node.sh 
export NODE_HOME=/usr/local/node
export PATH=$NODE_HOME/bin:$PATH

以上是关于shell cat EOF 变量自动解析问题的主要内容,如果未能解决你的问题,请参考以下文章

linux shell中的EOF

shell用法 (cat << EOF)

shell 脚本 EOF配合将cat将文本追加到指定文件

linux shell “cat <<EOF“的作用,用于连续输出多行文本(连续打印)(文本块)

linux shell “cat <<EOF“的作用,用于连续输出多行文本(连续打印)(文本块)

Shell中的cat<<EOF (here document) (转)