• Linux下多个命令串联执行(管道/xargs/exec)


    Linux的强大,就是可以把很多完成单一功能的命令行程序通过串联的方式组合在一起,就可以完成非常复杂的功能,并且只需要漂亮的一行代码搞定。是不是很神奇。

    多个命令串联执行, 大家都熟知的应该就是管道 | 了,但是管道给第二个命令传递是直接传到命令的输入上,这种方式要求命令本身的支持,支持的命令较少。

    就是命令需要支持从 stdin 的标准输入读取输入信息的命令才能使用 管道进行串联。 但是大部分的程序是通过入参来读取输入信息的。这个时候就需要其他的支持了。

    下面我们重点讲 “xargs”和“exec”

    xargs,是把第一个命令的输出作为参数传递到第二个命令上,这种方式只要第二个命令可以接受参数即可,支持的命令较多。

    1. find ./kernel/msm-4.19/drivers/usb -name "Kconfig" | cat
    2. find ./kernel/msm-4.19/drivers/usb -name "Kconfig" | xargs cat
    3. find ./kernel/msm-4.19/drivers/usb -name "Kconfig" -exec cat {} \;

    上面指令中的第一行代码仅仅是输出找到文件列表

    上面指令中的第二行代码就是输出找到的每一个文件的文件内容

    上面指令中的第三行代码和第二行代码输出的内容一致。

    xargs还有-d分隔符选项, -p等待选择执行的选项, -n代表每次传递几个参数的选项

    find  ./kernel/msm-4.19/drivers/ -name "Kconfig" -exec echo {} \; -exec grep -w  "USB_PD" {} \;

    用 -exec组合多个命令执行,需要使用    \;   作为命令分隔符

    用 |xargs组合多个命令执行,需要使用  | 作为命令分隔符

    1. root@ubuntu:/home/Open-Q_865_Android-Q_v1.1# find ./kernel/msm-4.19/drivers/ -name "Kconfig" |xargs grep -w "USB_PD"
    2. ./kernel/msm-4.19/drivers/usb/pd/Kconfig:config USB_PD
    3. ./kernel/msm-4.19/drivers/usb/pd/Kconfig: select USB_PD
    find ./kernel/msm-4.19/drivers/ -name "Kconfig" |xargs grep -w "USB_PD"|xargs grep "select"

    经过我的测试, |xargs  和  -exec  除了使用的语法不一样,功能一样。

    1. root@ubuntu:/home/Android-Q_v1.1# find ./ -name rdbg.ko|grep kona | xargs md5sum
    2. 573c3a555c3e6ec3176beef369fd366a ./out/target/product/kona/vendor/lib/modules/rdbg.ko
    3. 573c3a555c3e6ec3176beef369fd366a ./out/target/product/kona/dlkm/lib/modules/rdbg.ko
    4. 76b2360a6e2d2caacd2a5b25225af4a8 ./out/target/product/kona/obj/kernel/msm-4.19/drivers/char/rdbg.ko
    5. 573c3a555c3e6ec3176beef369fd366a ./out/target/product/kona/obj/kernel/msm-4.19/staging/lib/modules/4.19.81+/kernel/drivers/char/rdbg.ko
    6. 573c3a555c3e6ec3176beef369fd366a ./out/target/product/kona/obj/PACKAGING/target_files_intermediates/kona-target_files-eng.root/VENDOR/lib/modules/rdbg.ko
    7. 573c3a555c3e6ec3176beef369fd366a ./out/target/product/kona/obj/PACKAGING/depmod_vendor_intermediates/lib/modules/0.0/vendor/lib/modules/rdbg.ko
    8. 573c3a555c3e6ec3176beef369fd366a ./kernel/ship_prebuilt/primary_kernel/out/target/product/kona/dlkm/lib/modules/rdbg.ko

  • 相关阅读:
    关于Electron框架应用的安全测试
    当zk某个节点坏掉如何修复
    Azure Service Principals ----- Azure 上最好保守的秘密的服务
    Linux端使用百度网盘命令行工具深度指南
    luogu P5560 [Celeste-B]Golden Feather
    来看看如何使用Proton_实现网络聚合_利用安全的网络协议实现网络通讯---工具箱工作笔记001
    机器学习、深度学习相关的项目集合【自行选择即可】
    有关在 Windows 上使用 Python 的常见问题解答
    Java Double compare()方法具有什么功能呢?
    网络协议分析-http/https/tcp/udp
  • 原文地址:https://blog.csdn.net/langeldep/article/details/127746040