免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
楼主: weichanghe2000
打印 上一主题 下一主题

[系统管理] 远程登录执行命令时,awk 为何 打不出 我要的结果 [复制链接]

论坛徽章:
4
白羊座
日期:2013-09-17 21:59:30技术图书徽章
日期:2013-10-12 22:16:03白羊座
日期:2013-10-14 11:01:40双子座
日期:2013-12-17 18:26:39
11 [报告]
发表于 2013-06-16 13:58 |只看该作者
回复 9# weichanghe2000
没用过cshell不太清楚错误。
你将' \$中间的空格去掉试试

   

论坛徽章:
2
数据库技术版块每日发帖之星
日期:2015-10-28 06:20:00数据库技术版块每日发帖之星
日期:2015-10-29 06:20:00
12 [报告]
发表于 2013-06-16 14:41 |只看该作者
回复 11# 井蛙夏虫

在实际命令中,我没有 写空格的,也是报 unmatched ’
   

论坛徽章:
4
白羊座
日期:2013-09-17 21:59:30技术图书徽章
日期:2013-10-12 22:16:03白羊座
日期:2013-10-14 11:01:40双子座
日期:2013-12-17 18:26:39
13 [报告]
发表于 2013-06-16 16:26 |只看该作者
回复 12# weichanghe2000
试试这个,我测试可以
  1. ssh host2 "if (-e ~/a) du -sh ~/a | awk '{print '"\\\"\"\$"HOSTNAME"\"\\\""','"\\\$"'0}'"
复制代码

论坛徽章:
2
数据库技术版块每日发帖之星
日期:2015-10-28 06:20:00数据库技术版块每日发帖之星
日期:2015-10-29 06:20:00
14 [报告]
发表于 2013-06-16 16:50 |只看该作者
本帖最后由 weichanghe2000 于 2013-06-16 16:58 编辑

回复 13# 井蛙夏虫


呵呵,我用上面你的代码 运行了,报 HOSTNAME: Undefined variable 错误。

你的这个 单、 双引号、反斜线 转义 太神了。

虽然结果报错,但是这这么复杂的转义 你都会,这个正是我想要学习的。

我看了 13问的 那节,仍然没有开窍,你能够 解释 上面 这种复杂的 转义 原理吗?? 很想学习下。

比如说:" if  这个 " 是与 末尾的 " 配对,       还是与 它后面 紧跟着的 "\\\ 这个 " 配对?
    awk '{  这个 '    与 末尾的 }' 中的 ' 配对,还是与 它后面 紧跟着的 print '" 中的 ' 配对?

单双引号 按道理 应该是 就近匹配,而不是 就远匹配吧?
我在这方面 一直 搞不清。

论坛徽章:
2
数据库技术版块每日发帖之星
日期:2015-10-28 06:20:00数据库技术版块每日发帖之星
日期:2015-10-29 06:20:00
15 [报告]
发表于 2013-06-16 17:45 |只看该作者
本帖最后由 weichanghe2000 于 2013-06-16 17:46 编辑

哎,实在搞不定了,只能 用 -v 选项了,把问题简单化了。
  1. ssh host2 "if (-e ~/a) du -sh ~/a | awk -v h=$HOSTNAME '{print h, "  '$0'  " }'   "
复制代码

论坛徽章:
4
白羊座
日期:2013-09-17 21:59:30技术图书徽章
日期:2013-10-12 22:16:03白羊座
日期:2013-10-14 11:01:40双子座
日期:2013-12-17 18:26:39
16 [报告]
发表于 2013-06-16 18:02 |只看该作者
回复 15# weichanghe2000
这个有问题,用的是本地的HOSTNAME变量。
上面的问题很明显,是因为host2主机上没有定义HOSTNAME环境变量,定义一下就可以了。



   

论坛徽章:
4
白羊座
日期:2013-09-17 21:59:30技术图书徽章
日期:2013-10-12 22:16:03白羊座
日期:2013-10-14 11:01:40双子座
日期:2013-12-17 18:26:39
17 [报告]
发表于 2013-06-16 18:13 |只看该作者
本帖最后由 井蛙夏虫 于 2013-06-16 18:14 编辑

回复 14# weichanghe2000
" if  这个 " 是与 末尾的 " 配对,       还是与 它后面 紧跟着的 "\\\ 这个 " 配对?    是与"\\\ 这个 " 配对。
awk '{  这个 '    与 末尾的 }' 中的 ' 配对,还是与 它后面 紧跟着的 print '" 中的 ' 配对?   是与它后面 紧跟着的 print '" 中的 ' 配对。
  1. "if (-e ~/a) du -sh ~/a | awk '{print '" \\ \" \" \$ "HOSTNAME" \" \\ \" "','" \\ \$ "'0}'"
复制代码
经本地shell处理后
  1. if (-e ~/a) du -sh ~/a | awk '{print ' \" "$HOSTNAME" \" ',' \$ '0}'
复制代码
经host2shell处理后
  1. {print "host2",$0}
复制代码

论坛徽章:
2
数据库技术版块每日发帖之星
日期:2015-10-28 06:20:00数据库技术版块每日发帖之星
日期:2015-10-29 06:20:00
18 [报告]
发表于 2013-06-16 18:57 |只看该作者
回复 16# 井蛙夏虫


   呵呵,应该不是这样的呢。

ssh host2 some cmds 时,就会 执行 .cshrc,就会 得到 环境变量 HOSTNAME 的 值的。
因为当我 直接登陆 ssh host2 之后,然后 echo $HOSTNAME 就可以 得到该值。

论坛徽章:
2
数据库技术版块每日发帖之星
日期:2015-10-28 06:20:00数据库技术版块每日发帖之星
日期:2015-10-29 06:20:00
19 [报告]
发表于 2013-06-16 19:00 |只看该作者
本帖最后由 weichanghe2000 于 2013-06-16 19:02 编辑

回复 17# 井蛙夏虫


    经本地shell处理后
  1. if (-e ~/a) du -sh ~/a | awk '{print ' \" "$HOSTNAME" \" ',' \$ '0}'
复制代码
由于上面 已经 丢失了 双引号,而  if ()   和 du -sh 之间 有空格,相当于是 2个 参数 传递给 host2, 这样
ssh host2 if (-e ~/a) du -sh ~/a  时,if (-e ~/a) 将会 按照 host2 语法解析,而  du -sh ~/a 将会 按照 本地机器host1  解析的哦。

这就是 为什么在 远程登陆,执行多个命令时,所以 后面的参数 都要 用 双引号 括起来,如 ssh host2 " cmd1; cmd2; cmd3; ......."。

上面只是我的 个人理解,不知道是否正确。

论坛徽章:
4
白羊座
日期:2013-09-17 21:59:30技术图书徽章
日期:2013-10-12 22:16:03白羊座
日期:2013-10-14 11:01:40双子座
日期:2013-12-17 18:26:39
20 [报告]
发表于 2013-06-16 20:06 |只看该作者
回复 18# weichanghe2000
你将HOSTNAME换为HOME看看是否出错,就可以知道是不是HOSTNAME未定义的问题了。

   
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP