为什么我不能将东西通过管道传输到 cd 中?
例子:
$ pwd >> ~/mloc
$ cd /
$ tail -n 1 ~/mloc | cd
Run Code Online (Sandbox Code Playgroud)
cd 失败。如果这样做:cd $(tail -n 1 ~/mloc),它的工作原理。
我理解我写的最后一个命令有效,但我不明白为什么我不能输入 cd。
Eli*_*gan 13
管道到进程会向它发送数据,而不是您在启动进程后键入的内容,而不是您在启动进程的命令中键入的内容。
(cd也不是一个过程,但这不太重要,我在下面解决它。)
管道将一个命令的输出附加到另一个命令的输入。考虑:
foo | bar
Run Code Online (Sandbox Code Playgroud)
运行bar,运行foo,和:
foo在终端上显示的输出,而是将其bar作为输入。bar foo(这两个要点实际上都表达了同样的意思。)
那么,当你运行时会发生什么tail -n 1 ~/mloc | cd?
cd并且无论何时cd在运行时接受输入,它都会从 的输出中获取该输入tail -n 1 ~/mloc。cd 运行时从不接受输入。有关此答案中输入和输出的确切含义的更多信息,请参阅标准流(维基百科)。(这里,输入是指“标准输入”,输出是指“标准输出”。)
还有一个问题cd实际上不是一个程序,而是一个内置的 shell,所以当你运行时cd不会启动新进程。但这并不是您尝试的方法不起作用的真正原因,因为:
正如您一直在尝试的那样,使用管道传递命令行参数将永远不适用于任何程序。
没有理由的壳不能写入,以适应管到一个shell内置的,考虑到他们适应管道从shell内建命令。
请注意,有时当您像使用真正的程序一样使用内置的 shell 时,会发生的情况是运行同名的真实程序。但是没有单独的程序cd,我们可以从 cd; 例如,运行cd blah 2>&1 | less;如果blah不存在或不是目录,您将能够在less.
最后,考虑cd $(tail -n 1 ~/mloc). 这个命令:
tail -n 1 ~/mloc并捕获其输出。cd .| 归档时间: |
|
| 查看次数: |
7839 次 |
| 最近记录: |