带重定向的 tee bash 命令
tee bash command with redirection
我有以下文件:
file1.txt
geek
for
geeks
我正在使用 tee
命令对输出执行两个操作。我的问题是关于第一个 tee
之后的重定向字符。我想获得 file1.txt 的第一列和
将其写入 file2.txt。当我 运行 以下命令时,我没有收到错误,但它没有给我第一列:
wc -l file1.txt |tee awk '{print }' - > file2.txt | sed 's/4/6/g' > file3.txt
但是,以下命令按预期工作。 >
在这里做什么?
wc -l file1.txt |tee >(awk '{print }' - > file2.txt) | sed 's/4/6/g' > file3.txt
此处,进程替换用于捕获通常会转到文件的输出
写入进程的Bash语法是>(command)
tee awk '{print }' - > file2.txt
会:
- 使用 3 个参数
awk
和 '{print }'
以及 -
. 执行 tee
tee
将 创建一个名为 awk
的文件, 另一个名为 '{print }'
的文件 和另一个名为 -
. 的文件
- 然后
tee
的输出会被重定向到file2.txt
tee
将复制输入到这 3 个文件,并将输出到 file2.txt
- 因此
| sed
将接收不到任何输入,因为 tee
的输出被重定向到文件,子 shell 什么也不输出。
tee >(awk '{print }' - > file2.txt)
会:
>(...)
- 运行
awk
有两个参数 '{print }'
和 -
- ------
'{print }'
被解释为脚本
- ------
-
被解释为标准输入(并且可以省略)
- ------然后
awk
的输出重定向到file2.txt
- 然后
bash
创建一个fifo或/dev/fd/something
文件
- 然后该文件的输出连接到
awk
进程的标准输入
- 并且
>(awk ...)
被 替换为 文件的文件名,很可能是 /dev/fd/something
tee >(...)
- 用一个参数执行 tee,例如
tee /dev/fd/something
/dev/fd/something
连接到另一端的awk进程
- 因此
tee
写入/dev/fd/something
并且awk
从另一端的stdin读取数据
tee
的输出被重定向到 | sed
What does the > is doing here?
第一次出现用于引入进程替换。第二次出现用于将 awk
命令的输出重定向到名为 file2.txt
的文件。第三次出现用于将 sed
命令的输出重定向到名为 file3.txt
.
的文件
我有以下文件:
file1.txt
geek
for
geeks
我正在使用 tee
命令对输出执行两个操作。我的问题是关于第一个 tee
之后的重定向字符。我想获得 file1.txt 的第一列和
将其写入 file2.txt。当我 运行 以下命令时,我没有收到错误,但它没有给我第一列:
wc -l file1.txt |tee awk '{print }' - > file2.txt | sed 's/4/6/g' > file3.txt
但是,以下命令按预期工作。 >
在这里做什么?
wc -l file1.txt |tee >(awk '{print }' - > file2.txt) | sed 's/4/6/g' > file3.txt
此处,进程替换用于捕获通常会转到文件的输出
写入进程的Bash语法是>(command)
tee awk '{print }' - > file2.txt
会:
- 使用 3 个参数
awk
和'{print }'
以及-
. 执行 tee
将 创建一个名为awk
的文件, 另一个名为'{print }'
的文件 和另一个名为-
. 的文件
- 然后
tee
的输出会被重定向到file2.txt
tee
将复制输入到这 3 个文件,并将输出到file2.txt
- 因此
| sed
将接收不到任何输入,因为tee
的输出被重定向到文件,子 shell 什么也不输出。
tee
tee >(awk '{print }' - > file2.txt)
会:
>(...)
- 运行
awk
有两个参数'{print }'
和-
- ------
'{print }'
被解释为脚本 - ------
-
被解释为标准输入(并且可以省略) - ------然后
awk
的输出重定向到file2.txt
- 然后
bash
创建一个fifo或/dev/fd/something
文件 - 然后该文件的输出连接到
awk
进程的标准输入 - 并且
>(awk ...)
被 替换为 文件的文件名,很可能是/dev/fd/something
- 运行
tee >(...)
- 用一个参数执行 tee,例如
tee /dev/fd/something
/dev/fd/something
连接到另一端的awk进程- 因此
tee
写入/dev/fd/something
并且awk
从另一端的stdin读取数据 tee
的输出被重定向到| sed
- 用一个参数执行 tee,例如
What does the > is doing here?
第一次出现用于引入进程替换。第二次出现用于将 awk
命令的输出重定向到名为 file2.txt
的文件。第三次出现用于将 sed
命令的输出重定向到名为 file3.txt
.