求一个cmd mkdir 管道传输的方法。感谢

求一个cmd mkdir 管道传输的方法。感谢,第1张

楼上回答的挺详细,但是有一点没说到,我补充一下,通过管道符传递参数是有前提的,就是该命令或程序支持从输入缓冲区(stdin)读入参数,否则你用管道符传参进去他不知道怎么处理会忽略或报错。

举个例子

正常建立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原理及用法详解


欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/yw/12007875.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-20
下一篇 2023-05-20

发表评论

登录后才能评论

评论列表(0条)

保存