为什么管道 pwd 和 echo 不起作用?

为什么管道 pwd 和 echo 不起作用?

我是unix新手。我在 ubuntu 终端中输入了这个命令:

pwd | echo

pwd我期望看到终端( )的输出/home/fatemeh/Documents/Code/test,但输出只是一个空行

为什么会发生这种情况?

答案1

echo不对标准输入执行任何操作;它只解析它的参数。因此,您正在有效地运行echo,它本身会输出一个空行,并且标准输入将被丢弃。

如果您想查看尝试实现的行为,请使用旨在解析标准输入的工具,例如cat

$ pwd | cat
/home/username

如果您确实想用来echo显示当前工作目录(或另一个命令的输出),您可以使用命令替换来为您执行此操作:

$ echo "Your shell is currently working in '$(pwd)'."
Your shell is currently working in '/home/username'.

答案2

正如其他答案中所述,echo不从标准输入读取,因此它不会打印 的输出pwd。以防万一您还不知道,pwd请自行打印它的输出,这样您只需单独运行它即可获得您想要的结果。

$ pwd
/current/working/dir

如果你真的想为此使用 echo 你可以使用命令替换。这会将命令 ( pwd)的输出echo作为参数传递。在这个例子中这也是不必要的,因为pwd它将输出它自己的...输出到标准输出。

$ echo "$(pwd)"
/current/working/dir

答案3

echo命令不从标准输入读取,而是写入您告诉它写入的内容。在这种情况下,您没有告诉它写任何内容,因此它打印的只是换行符。 pwd | echo相当于只是跑步echo

如果你想使用管道,那么你需要使用一些从标准输入读取的命令(例如,cat):

$ pwd | cat
/path/to/current/directory
$ 

相关内容