使用 xargs cd 到一个目录

Ian*_*sky 36 unix xargs

现在感觉自己像个白痴。为什么这不起作用?

echo "/some/directory/path" | xargs -n1 cd
Run Code Online (Sandbox Code Playgroud)

Ign*_*ams 33

管道在子进程中运行 xargs,而 xargs 在子进程中运行 cd。子流程中的更改不会传播到父流程。

  • 实际上,`xargs` 不能运行 `cd`,因为它必然是一个内置的 shell,而 `xargs` 只能运行独立的可执行文件。但是,您所说的关于子流程的内容是正确的。 (7认同)
  • 你可以通过使用反引号获得你想要的效果:`cd \`echo "/some/directory/path" | cut -d\ -f1\`` (请注意,我添加了 'cut' 来分割空格并像 xargs 那样抓取第一项) (4认同)

小智 28

该命令cd是内置的,因为有关当前目录的信息与进程相关联,并且只有内置的 shell 才能更改正在运行的 shell 的当前目录。

您的代码有两个问题:

  1. xargs无法运行,cd因为它cd是一个内置命令,xargs只能运行可执行文件。
  2. 即使您cd在名为 from 的子进程中运行xargs,它也不会对父进程产生任何影响,如上所述。

解决办法是运行一个子shell,在里面运行cd,然后你就可以在新的当前目录中执行命令了。

ls | xargs -L 1 bash -c 'cd "$0" && pwd && ls'
Run Code Online (Sandbox Code Playgroud)