免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 5209 | 回复: 5

[系统管理] 在shell脚里,xargs -n1 如何把参数传给shell里的函数呢? [复制链接]

论坛徽章:
2
金牛座
日期:2014-09-22 15:40:012015年亚洲杯之韩国
日期:2015-04-21 10:54:01
发表于 2015-05-06 14:04 |显示全部楼层
  1. #!/bin/bash

  2. PATH=/usr/lib64/qt-3.3/bin:/usr/kerberos/sbin:/usr/kerberos/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:./:/usr/java/default/bin:/root/bin
  3. acl_echo(){
  4.         dir=$1
  5.         dir="${dir}"
  6.         acl_num=$(stat --format=%a $dir)
  7.         echo -ne "${acl_num}\t${dir}\n"
  8. }

  9. find /boot | xargs -n1 acl_echo
复制代码
报错
  1. [root@admin /]# ./get_acl.sh
  2. xargs: acl_echo: No such file or directory
复制代码
兄弟帮忙看下

论坛徽章:
0
发表于 2015-05-06 14:14 |显示全部楼层
find /boot | xargs -n1 acl_echo

写成这样
for item in `fond /boot`
do
    acl_echo ${item}
done

论坛徽章:
39
辰龙
日期:2013-08-21 15:45:192015亚冠之广州富力
日期:2015-05-12 16:34:52亥猪
日期:2015-03-03 17:22:00申猴
日期:2015-03-03 17:21:37未羊
日期:2014-10-10 13:45:41戌狗
日期:2014-06-17 09:53:29巨蟹座
日期:2014-06-12 23:17:17双鱼座
日期:2014-06-10 12:42:44寅虎
日期:2014-06-09 12:52:172015亚冠之卡尔希纳萨夫
日期:2015-05-24 15:24:35黄金圣斗士
日期:2015-12-02 17:25:0815-16赛季CBA联赛之吉林
日期:2017-06-24 16:43:52
发表于 2015-05-06 14:25 |显示全部楼层
  1. find /boot | xargs -n1 stat --format="%n        %a"
复制代码

论坛徽章:
12
技术图书徽章
日期:2014-07-11 16:27:5215-16赛季CBA联赛之山西
日期:2016-01-08 16:10:11操作系统版块每日发帖之星
日期:2015-08-01 06:20:002015亚冠之武里南联
日期:2015-06-11 01:12:162015年亚洲杯之阿联酋
日期:2015-03-20 11:41:462015年亚洲杯纪念徽章
日期:2015-03-18 18:08:422015年辞旧岁徽章
日期:2015-03-03 16:54:15丑牛
日期:2015-01-10 22:23:32天秤座
日期:2014-08-20 15:53:35水瓶座
日期:2014-08-11 12:08:51午马
日期:2014-07-23 23:03:38IT运维版块每日发帖之星
日期:2016-02-18 06:20:00
发表于 2015-05-06 19:54 |显示全部楼层
本帖最后由 phanx 于 2015-05-06 19:56 编辑

回复 1# hsrenqing


    如果你要获得信息的话,楼上的语句就可以了。

如果你确实需要xargs执行函数并传递给函数,那么可以这样。
  1. #!/bin/bash
  2. PATH=/usr/lib64/qt-3.3/bin:/usr/kerberos/sbin:/usr/kerberos/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:./:/usr/java/default/bin:/root/bin

  3. acl_echo(){
  4.         dir=$1

  5.         dir="${dir}"

  6.         acl_num=$(stat --format=%a $dir)

  7.         echo -ne "${acl_num}\t${dir}\n"

  8. }

  9. export -f acl_echo


  10. find /boot | xargs -n1 bash -c 'acl_echo "$0"'
复制代码
最后一句也可以用find的exec来做,不用xargs.
  1. find /boot -exec bash -c 'acl_echo "$0"' {} \;
复制代码

论坛徽章:
2
金牛座
日期:2014-09-22 15:40:012015年亚洲杯之韩国
日期:2015-04-21 10:54:01
发表于 2015-05-07 09:01 |显示全部楼层
  1. #!/bin/bash
  2. set -xv

  3. PATH=/usr/lib64/qt-3.3/bin:/usr/kerberos/sbin:/usr/kerberos/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:./:/usr/ja
  4. va/default/bin:/root/bin
  5. acl_echo(){
  6.         dir=$1
  7.         dir="${dir}"
  8.         acl_num=$(stat --format=%a $dir)
  9.         echo -ne "${acl_num}\t${dir}\n"
  10. }

  11. export -f acl_echo

  12. find /root | xargs -n1 -i bash -c "acl_echo {}"
复制代码
最终结果是这样子的,这里其实是准备把整个系统的任意文件以及目录导出,在生产环境里布好,也可以用来作为备份以及检查,运维也要防着其它用户操作不当造成的问题,也是在处理其它用户造的问题出现的这个需求,把系统里不少目录设置成700权限了,更惨的是还不知道哪些改了,误操作,除了ROOT可以登陆系统,其它用户都不能登陆。没办法,只好找到一台正常的机器,把关键目录的权限导出,重新设置了

论坛徽章:
12
技术图书徽章
日期:2014-07-11 16:27:5215-16赛季CBA联赛之山西
日期:2016-01-08 16:10:11操作系统版块每日发帖之星
日期:2015-08-01 06:20:002015亚冠之武里南联
日期:2015-06-11 01:12:162015年亚洲杯之阿联酋
日期:2015-03-20 11:41:462015年亚洲杯纪念徽章
日期:2015-03-18 18:08:422015年辞旧岁徽章
日期:2015-03-03 16:54:15丑牛
日期:2015-01-10 22:23:32天秤座
日期:2014-08-20 15:53:35水瓶座
日期:2014-08-11 12:08:51午马
日期:2014-07-23 23:03:38IT运维版块每日发帖之星
日期:2016-02-18 06:20:00
发表于 2015-05-07 16:30 |显示全部楼层
回复 5# hsrenqing


    这是个简单有效的好办法。

   也可以直接把用户数据目录拷贝出来,然后重装就行了。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP