现在感觉自己像个白痴。为什么这不起作用?
echo "/some/directory/path" | xargs -n1 cd
Run Code Online (Sandbox Code Playgroud)
Ign*_*ams 33
管道在子进程中运行 xargs,而 xargs 在子进程中运行 cd。子流程中的更改不会传播到父流程。
小智 28
该命令cd
是内置的,因为有关当前目录的信息与进程相关联,并且只有内置的 shell 才能更改正在运行的 shell 的当前目录。
您的代码有两个问题:
xargs
无法运行,cd
因为它cd
是一个内置命令,xargs
只能运行可执行文件。cd
在名为 from 的子进程中运行xargs
,它也不会对父进程产生任何影响,如上所述。解决办法是运行一个子shell,在里面运行cd
,然后你就可以在新的当前目录中执行命令了。
ls | xargs -L 1 bash -c 'cd "$0" && pwd && ls'
Run Code Online (Sandbox Code Playgroud)