xargs: cd: No such file or dirctory

前几天在写一个任务, 需要找到一个特定名字的路径并cd进去, 就在shell脚本中写了类似以下的命令:
xxxx | xargs cd
结果运行报错:

例子

要明白此处为什么会报错就需要清楚xargs的执行原理.
xargs是个可执行文件, 通过which 可以查到它的本体在哪:

image.png

在执行echo "xxx" | xargs command 命令时, xargs会调用c语言库函数execve()并将command和参数xxx作为其函数参数.
execve的输入参数是一个可执行文件的路径以及针对该可执行文件的输入参数
因此xargs要先查找到command可执行文件的路径,并和参数xxx一起传入execve, 因此command必须是个可执行文件命令..

然而, cd并不是一个可执行文件命令:

image.png

可以看到cd的类型是shell的内置命令, 使用which找不到它的路径.

真相大白

解决办法:
换一种办法, 不要直接传参数到cd.
先存到一个变量中, 如
Dir="/home"
然后cd进去
cd $Dir
即可

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容