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

原文地址:https://www.cnblogs.com/fsckzy/p/10837831.html

时间: 2024-08-29 20:54:47

shell cat EOF 变量自动解析问题的相关文章

使用cat和EOF生成 shell 脚本时会自动解析变量的解决办法

之前使用以下的用法,执行时会自动执行``里的语句,同时会把$变量变为空. cat <<- EOF >> /usr/local/reboot.sh #!/bin/sh DAY=`date +"%Y-%m-%d %H:%M"` echo "$DAY reboot" >> /usr/local/reboot.log reboot EOF 执行结果: #!/bin/sh DAY=2016-09-03 17:11 echo " r

linux shell 的here document 用法 (cat &lt;&lt; EOF)

什么是Here Document Here Document 是在Linux Shell 中的一种特殊的重定向方式,它的基本的形式如下 cmd << delimiter   Here Document Content delimiter 它的作用就是将两个 delimiter 之间的内容(Here Document Content 部分) 传递给cmd 作为输入参数. 比如在终端中输入cat << EOF ,系统会提示继续进行输入,输入多行信息再输入EOF,中间输入的信息将会显示在

Shell中的cat&lt;&lt;EOF (here document) (转)

Linux shell的here document用法(cat << EOF) 什么是Here Document Here Document 是在Linux Shell 中的一种特殊的重定向方式,它的基本的形式如下 cmd << delimiter Here Document Content delimiter 它的作用就是将两个 delimiter 之间的内容(Here Document Content 部分) 传递给cmd 作为输入参数. 比如在终端中输入cat <<

Shell脚本——cat/EOF输出多行

在某些场合,可能我们需要在脚本中生成一个临时文件,然后把该文件作为最终文件放入目录中.(可参考ntop.spec文件)这样有几个好处,其中之一就是临时文件不是唯一的,可以通过变量赋值,也可根据不同的判断生成不同的最终文件等等.一.cat和EOFcat命令是linux下的一个文本输出命令,通常是用于观看某个文件的内容的:EOF是“end of file”,表示文本结束符.结合这两个标识,即可避免使用多行echo命令的方式,并实现多行输出的结果.二.使用看例子是最快的熟悉方法: # cat <<

shell 的here document 用法 (cat &lt;&lt; EOF) (转)

什么是Here Document Here Document 是在Linux Shell 中的一种特殊的重定向方式,它的基本的形式如下 cmd << delimiter Here Document Content delimiter 它的作用就是将两个 delimiter 之间的内容(Here Document Content 部分) 传递给cmd 作为输入参数. 比如在终端中输入cat << EOF ,系统会提示继续进行输入,输入多行信息再输入EOF,中间输入的信息将会显示在屏幕

shell中的变量及shell条件判断

Shell 基础之变量和条件判断 一.shell概述 1.shell概述: shell是一个命令行的解释器,为用户提供了一个向Linux内核发送请求以便运行程序的界面系统及程序,用户可以用shell来启动.挂起.停止甚至编写一些程序,shell还是一个功能强大的编程语言,shell是解释性的脚本语言,在shell中可以直接调用Linux命令. 2.shell脚本的用途 (1)自动化常用的命令 (2)执行系统管理和故障排除 (3)执行简单的应用程序 (4)处理文本或文件 3.shell的分类 (1

二、Shell中的变量

变量是任何程序或脚本的重要组成部分.变量为程序或脚本访问内存中的可被修改的一块数据提供了简单的方式.Linux Shell中的变量可以被指定为任意的数据类型.Shell中有两种变量的类型:系统变量(环境变量)和用户自定义的变量(本地变量或Shell变量). 环境变量:作用域为当前shell进程及其子进程:环境变量一般均为大写.常用的环境变量有: 系统变量 含义 BASH_VERSION 保存bash实例的版本 DISPLAY 设置X display名字 EDITOR 设置默认的文本编辑器 HIS

第六章 shell学习之变量和引用

变量 本地变量:类似于局部变量,只在当前shell进程有效 环境变量:适用于所有登录进程所产生的子进程 位置参数:用于向shell脚本传递参数,只读 变量替换和赋值 引用变量值就称为变量替换,$就为变量替换符号,如a为变量名则$a或${a}为变量值 将值赋给某个变量名就称为变量赋值,格式:variable=value或${ variable=value },如值中包含空格则必须用"" 清除变量的值: unset 变量名 设置只读变量: variable=value readonly v

Bash Shell脚本编程-变量知识

Shell:GUI  CLI 提供交互式接口:提高效率 命令行展开:~ ,{} 命令别名:alias 命令历史:history Globbing:*,?,[],[^] 命令补全:$PATH指定的目录下 路径补全:TAB键 管道:| 输入输出重定向:>    >> 提供编程环境: bash自动运行脚本机制 面向过程(以指令为中心组织数据)的编程模型 脚本编程 输入指令解决问题 程序是语句和表达式组成的 运行时根据一定流程来执行: 顺序执行 选择执行 循环执行 程序是指令+数据的 面向对象(