前几天在写一个任务, 需要找到一个特定名字的路径并cd
进去, 就在shell脚本中写了类似以下的命令:
xxxx | xargs cd
结果运行报错:
要明白此处为什么会报错就需要清楚xargs
的执行原理.
xargs
是个可执行文件, 通过which
可以查到它的本体在哪:
在执行echo "xxx" | xargs command
命令时, xargs
会调用c语言库函数execve()
并将command
和参数xxx
作为其函数参数.
execve
的输入参数是一个可执行文件的路径以及针对该可执行文件的输入参数
因此xargs
要先查找到command
可执行文件的路径,并和参数xxx
一起传入execve
, 因此command
必须是个可执行文件命令..
然而, cd
并不是一个可执行文件命令:
可以看到
cd
的类型是shell的内置命令, 使用which
找不到它的路径.
真相大白
解决办法:
换一种办法, 不要直接传参数到cd
.
先存到一个变量中, 如
Dir="/home"
然后cd
进去
cd $Dir
即可