免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1021 | 回复: 3
打印 上一主题 下一主题

[系统管理] EOF导环境变量到bashrc中出现变量值 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2015-09-28 18:36 |只看该作者 |倒序浏览
各位好,
  我在shell script中使用<<EOF...EOF导入一段原始的环境变量到/etc/bashrc的末尾,导是导过去了,不过导过去后看到的不是原始的环境变量串,而是环境变量的值,很奇怪,哪位大神帮忙解解,万分感谢!详情如下:

1. shell脚本中的代码如下:

cat >> /etc/bashrc <<EOF
export HISTORY_FILE="/var/log/history.log"
export PROMPT_COMMAND='{ thisHistID=`history 1|awk "{print\\$1}"`;lastCommand=`history 1| awk "{\\$1=\"\" ;print}"`;user=`id $(whoami)`;whoStr=(`who -u am i`);realUser=${whoStr[0]};logMonth=${whoStr[2]};logDay=${whoStr[3]};logTime=${whoStr[4]};pid=${whoStr[6]};ip=${whoStr[7]};if [ ${thisHistID}x != ${lastHistID}x ];then echo -E `date "+%Y/%m/%d %H:%M:%S"` $user\($realUser\)@$ip[PIDpid][LOGINlogMonth $logDay $logTime] --- $lastCommand ;lastHistID=$thisHistID;fi; } >> $HISTORY_FILE'
EOF

2. 再到/etc/bashrc中查看,看到一些变量已经被加上值了,我想要的是真正的原始变量

export HISTORY_FILE="/var/log/history.log"
export PROMPT_COMMAND='{ thisHistID=221;lastCommand= cat >> /etc/bashrc <<EOF;user=uid=0(root) gid=0(root) groups=0(root),1(bin),2(daemon),3(sys),4(adm),6(disk),10(wheel) context=root:system_r:unconfined_t:SystemLow-SystemHigh;whoStr=(root     pts/2        2015-09-28 03:34   .         16833 (192.168.48.1));realUser=;logMonth=;logDay=;logTime=;pid=;ip=;if [ x != x ];then echo -E 2015/09/28 03:34:43 \(\)@[PID:][LOGIN:  ] ---  ;lastHistID=;fi; } >> '

论坛徽章:
0
2 [报告]
发表于 2015-09-29 18:00 |只看该作者
终于测试通过, 原来是特殊符号需要用 \ 来逃避, 但不知道print和$1之前为什么需要5个\, \\\\\$1

cat >> /etc/bashrc <<EOF
export HISTORY_FILE="/var/log/history.log"
export PROMPT_COMMAND='{ thisHistID=\`history 1|awk "{print\\\\\$1}"\`;lastCommand=\`history 1| awk "{\\\\\$1=\"\" ;print}"\`;user=\`id \$(whoami)\`;whoStr=(\`who -u am i\`);realUser=\${whoStr[0]};logMonth=\${whoStr[2]};logDay=\${whoStr[3]};logTime=\${whoStr[4]};pid=\${whoStr[6]};ip=\${whoStr[7]};if [ \${thisHistID}x != \${lastHistID}x ];then echo -E \`date "+%Y/%m/%d %H:%M:%S"\` \$user\(\$realUser\)@\$ip[PID:\$pid][LOGIN:\$logMonth \$logDay \$logTime] --- \$lastCommand ;lastHistID=\$thisHistID;fi; } >> \$HISTORY_FILE'
EOF

论坛徽章:
0
3 [报告]
发表于 2015-09-29 18:05 |只看该作者
后来发现用5个\是对的,因为原文本身有两个\, 再加上一个$, 所以需要用5个, 群里的大神,有没有一通用办法,把这段代码通过脚本原样写到/etc/bashrc中, 感谢!

steve_zeng 发表于 2015-09-29 18:00
终于测试通过, 原来是特殊符号需要用 \ 来逃避, 但不知道print和$1之前为什么需要5个\, \\\\\$1

cat >>  ...

论坛徽章:
0
4 [报告]
发表于 2015-10-03 15:12 |只看该作者
真的不错的,来支持了呢
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP