举个例子
正常建立y目录只需要使用md y 即可,该命令第一部分视为要执行的动作,第二部分视为用户定制的信息,这里你传递什么,他就会认为你要建立什么名字的目录,也就是说y信息是通过命令行参数的形式告诉md的,他不是在自己开始执行后等你手动输入y获取你定制的信息的。
典型的例子就是hnsz2k写的那样,rd加上/s参数删除目录时会提示你是否确认y/n,需要你手动输入y或者n才能继续,这情况就是需要从输入缓冲区中读取你的定制信息,使用管道符才会生效。还有比较常用的就是findstr命令,你可以自己琢磨一下。
通常使用shell去运行脚本,两种方法 :
对于 bash xxx.sh , 首先bash 会在当前目录去寻找 xxx.sh ,如果找到,就直接运行,找不到则按照环境变量 $PATH 的指定路径,按顺序去找,如果找到,则执行,找不到则报错。
shell脚本的参数 $0 就是要执行的shell脚本 xxx.sh , $1 就是后面紧跟 xxx.sh 的参数, $2 , $3 依次类推
如果用 bash -c 那么 bash 会从第一个非选项参数后面的字符串中读取命令,如果字符串有多个空格,第一个空格前面的字符串是要执行的命令,也就是 $0 , 后面的是参数,即 $1 , $2 ….
使用bash -c 要注意两点
-c 第一个字符串一定要是命令路径,不能是文件名,如果把./atest前面的./去掉,那么就会报找不到命令
命令文件必须要有可执行权限,即./atest 的必须就有x属性
个人理解bash -c “./atest hello world”实际上和./atest hello world等价
先说说 sh -c 吧, sh , 其实就是 bash 命令.
-c 的意思是 command,所以 bash -c 后面应该跟一个 command。
用法:
管道实现的是将前面的stdout作为后面的stdin,但是有些命令不接受管道的传递方式,最常见的就是ls命令。
有些时候命令希望管道传递的是参数,但是直接用管道有时无法传递到命令的参数位,这时候需要xargs,xargs实现的是将管道传输过来的stdin进行处理然后传递到命令的参数位上。
也就是说xargs完成了两个行为:处理管道传输过来的stdin;将处理后的传递到正确的位置上。
xargs的作用不仅仅限于简单的stdin传递到命令的参数位,它还可以将stdin或者文件stdin分割成批,每个批中有很多分割片段,然后将这些片段按批交给xargs后面的命令进行处理。
通俗的讲就是原来只能一个一个传递,分批可以实现10个10个传递,每传递一次,xargs后面的命令处理这10个中的每一个,处理完了处理下一个传递过来的批,如下图。
Linux中的bash -c 的使用详解
xargs原理及用法详解
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)