我想把很多目录推到堆栈上,我跑了:
echo ~/{Desktop,Downloads,Movies} | xargs pushd
并遇到xargs: pushd: No such file or directory
支持扩展不是导致我的想法与发生的事情不匹配的原因,因为echo ~/Desktop | xargs pusdh
会导致同样的错误。
作为比较点,echo ~/Desktop | xargs cd
会像预期的那样更改目录。
这里发生了什么?
答案 0 :(得分:1)
这是语义,等效语句应该是:
pushd $(echo ~/{Desktop,Downloads,Movies})
在我的实验之后,内置命令的行为就像
#!/bin/sh
function pushd()
{
accept input from $1, $2, $3.....
# Builtin will not read from stdin! So you can't use pipe.
}
内置命令应该被视为 shell函数。
<强> [编辑] 强>
zsh中的'pushd'命令与'cd'一起实现,它只接受一个参数。 所以你不能在单个语句中推送多个目录。 source is there
答案 1 :(得分:0)
您确定xargs cd
符合预期吗?我会感到惊讶!如果您需要确认,xargs
会调用二进制文件,但pushd
不会 - 运行type pushd
。 <{1}}和cd
作为外部二进制文件没有多大意义。
您需要捕获变量中的目录,并在shell进程本身的for循环中调用pushd
,而不是从pushd
调用,这是shell的子进程,因此,xargs
或其子节点修改的任何目录状态都不会传递给父shell。