美文网首页
shell 中各个命令的区别,你了解多少?

shell 中各个命令的区别,你了解多少?

作者: d390347c4084 | 来源:发表于2019-03-08 11:42 被阅读72次

1、xargs作用:

(1)将前一个命令的标准输出传递给下一个命令,作为它的参数,xargs的默认命令是echo,空格是默认定界符

(2)将多行输入转换为单行

2、使用模式:

frontcommand| xargs -option latercommand

front command: 前一个命令

-option: xargs的选项

later command: 后一个命令

一般与管道“|”结合使用

3、xargs常用选项

-n: 指定一次处理的参数个数

-d: 自定义参数界定符

-p: 询问是否运行 later command 参数

-t : 表示先打印命令,然后再执行

-i : 逐项处理

…更多参数查看man xargs

4、xargs与管道|的区别

管道“|” 用来将前一个命令的标准输出传递到下一个命令的标准输入。

xargs 将前一个命令的标准输出传递给下一个命令,作为它的参数。

可见,标准输入与命令参数是不同的。个人理解,命令参数就是直接跟在命令后面的,标准输入可以是键盘,文件等。

所以,管道符 | 所传递给程序的不是简单地在程序名后面输入的参数,它们会被程序内部的读取功能如scanf和gets等接收,而xargs则是将内容作为普通的参数传递给程序,相当于直接跟在命令后面。况且,有些命令是不接受标准输入的,比如kill,rm等命令。

总结:管道符后不加xargs相当于先将xargs后面的命令回车执行一下再从键盘里输入管道符前面命令执行的结果内容

加上xargs 相当于执行命令(xargs后面的命令)后,直接从键盘输入管道符前面命令执行的结果内容再回车,即管道前面的结果直接跟在xargs 后面的命令后面

再总结一下,就是回车的先后顺序不太一样。

5、xargs与-exec的区别

-exec:{}表示命令的参数即为所找到的文件,以;表示comman命令的结束。\是转义符,

因为分号在命令中还有它用途,所以就用一个\来限定表示这是一个分号而不是表示其它意思。

-ok: 和 -exec 的作用相同,格式也一样,只不过以一种更为安全的模式来执行该参数

所给出的shell给出的这个命令之前,都会给出提示,让用户来确定是否执行。

xargs将参数一次传给echo,即执行:echo begin ./xargs.txt ./args.txt

find . -name'*.txt'-typef | xargsechobegin

exec一次传递一个参数,即执行:echo begin ./xargs.txt;echo begin ./args.txt

find . -name'*.txt'-typef -execechobegin {} \;

xargs 要结合管道来完成

格式:find [option] express |xargscommand

很明显,exec是对每个找到的文件执行一次命令,除非这单个的文件名超过了几k,否则不会出现命令行超长出报错的问题。

而xargs是把所有找到的文件名一股脑的转给命令。当文件很多时,这些文件名组合成的命令行参数很容易超长,导致命令出错。

另外, find | xargs 这种组合在处理有空格字符的文件名时也会出错,因为这时执行的命令已经不知道哪些是分割符、哪些是文件名中的空格! 而用exec则不会有这个问题。

总结

相比之下,也不难看出各自的缺点

1、exec 每处理一个文件或者目录,它都需要启动一次命令,效率不好;

2、exec 格式麻烦,必须用 {} 做文件的代位符,必须用 \; 作为命令的结束符,书写不便。

3、xargs 不能操作文件名有空格的文件;

4、exec参数是一个一个传递的,传递一个参数执行一次命令;xargs一次将参数传给命令,可以使用-n控制参数个数。

5、exec文件名有空格等特殊字符也能处理;xargs不能处理特殊文件名,如果想处理特殊文件名需要特殊处理

综上,如果要使用的命令支持一次处理多个文件,并且也知道这些文件里没有带空格的文件,那么使用 xargs比较方便; 否则,就要用 exec了。

相关文章

  • shell 中各个命令的区别,你了解多少?

    1、xargs作用: (1)将前一个命令的标准输出传递给下一个命令,作为它的参数,xargs的默认命令是echo,...

  • adb命令大全

    adb命令与adb shell命令的区别? adb命令是PC端adb程序自带的命令 adb shell 命令是调用...

  • adb与adb shell命令使用

    adb命令与adb shell命令的区别?adb命令是PC端adb程序自带的命令adb shell 命令是调用An...

  • 管道命令

    参考linux shell 管道命令(pipe)使用及与shell重定向区别、管道命令 管道命令操作符是:”|”,...

  • shell & bash基础命令及巧用

    shell与bash脚本的区别shell是Linux基础命令解释器bash(Bourne Again shell)...

  • Linux:环境变量 - set、env、export

    Linux中set,env和export这三个命令的区别 set命令显示当前shell的变量,包括当前用户的变量;...

  • exec命令

    shell 中的 exec 两种用法: 1.exec 命令 ;命令代替shell程序,命令退出,shell 退出;...

  • 一分钟看懂头部 shell #!/usr/bin命令

    Shell 是什么 (命令解析器) 在计算机科学中,Shell俗称壳(用来区别于核),是指“提供使用者使用界面”的...

  • Hbase的shell命令学习<一>

    在学习Hbase的shell命令,之前先得了解如何进入hbase的shell命令行,通过执行如下简单的命令回车后进...

  • su & su -

    su命令和su -命令最大的本质区别就是:前者只是切换了root身份,但Shell环境仍然是普通用户的Shell;...

网友评论

      本文标题:shell 中各个命令的区别,你了解多少?

      本文链接:https://www.haomeiwen.com/subject/wcxrpqtx.html