kature Asked: 2022-07-13 04:53:42 +0800 CST2022-07-13 04:53:42 +0800 CST 2022-07-13 04:53:42 +0800 CST tee 与重定向/附加有何不同? 772 如果我们想将刚刚在 stdin 中写入的内容复制粘贴到 stdout,我们可以使用 redirect>或 append >>。 tee从标准输入写入标准输出有何不同? tee 3 个回答 Voted Best Answer raj 2022-07-13T05:01:56+08:002022-07-13T05:01:56+08:00 tee有一个输入和两个输出(因此得名,在管道中使用的三通组件之后)。>使用或>>具有一个输入和一个输出的重定向。 使用tee,您将标准输入重定向到标准输出和(第二个副本)到指定为参数的文件tee。重定向>或>>不能这样做。 例如,如果您键入: ls -l | tee file-list 你会在终端上得到一个目录列表,它同时被复制到文件file-list中。但是,如果您键入 ls -l > file-list 目录列表仅存储在文件file-list中,终端上没有输出。 Philip Couling 2022-07-13T05:13:04+08:002022-07-13T05:13:04+08:00 你问这个问题的背景很重要。 例子: cat one_file > another_file 执行此操作时,cat不会打开another_file. 您的 shell 打开另一个文件并将 stdout 设置cat为该文件描述符。 如果您尝试写入需要 root 权限的文件,这可能会出现问题。所以这很可能行不通。 sudo echo 1 > /some/root/owned/file /some/root/owned/file上面的shell在执行之前尝试打开sudo并且没有权限。 这在哪里起作用: echo 1 | sudo tee /some/root/owned/file 那是因为tee已经以 root 身份运行,并且它tee会在此上下文中打开文件。不是壳 InjectedScript 2022-07-13T05:10:24+08:002022-07-13T05:10:24+08:00 >, >>使用或将输出重定向到文件的区别command | tee -a filename在于,tee您可以设置可以以不同方式处理错误的模式,并且tee可以写入/附加到文件和终端。有时人们使用tee是因为他们想在终端中查看命令的输出并将其保存到文件中,>/>>但不能这样做。
tee
有一个输入和两个输出(因此得名,在管道中使用的三通组件之后)。>
使用或>>
具有一个输入和一个输出的重定向。使用
tee
,您将标准输入重定向到标准输出和(第二个副本)到指定为参数的文件tee
。重定向>
或>>
不能这样做。例如,如果您键入:
你会在终端上得到一个目录列表,它同时被复制到文件
file-list
中。但是,如果您键入目录列表仅存储在文件
file-list
中,终端上没有输出。你问这个问题的背景很重要。
例子:
执行此操作时,
cat
不会打开another_file
. 您的 shell 打开另一个文件并将 stdout 设置cat
为该文件描述符。如果您尝试写入需要 root 权限的文件,这可能会出现问题。所以这很可能行不通。
/some/root/owned/file
上面的shell在执行之前尝试打开sudo
并且没有权限。这在哪里起作用:
那是因为
tee
已经以 root 身份运行,并且它tee
会在此上下文中打开文件。不是壳>, >>
使用或将输出重定向到文件的区别command | tee -a filename
在于,tee
您可以设置可以以不同方式处理错误的模式,并且tee可以写入/附加到文件和终端。有时人们使用tee是因为他们想在终端中查看命令的输出并将其保存到文件中,>/>>
但不能这样做。