Unix和Unix-like系统的Shell 中的 : > , >> , < , <<,<<< ,1>,2>,&>,|
在Unix和Unix-like系统的Shell中,常用的输出重定向操作包括:
>
或1>
- 标准输出重定向:用于将命令的标准输出(STDOUT)重定向到一个文件中,而不是显示在终端上。
例如:
ls > files.txt
会将ls
命令的输出保存到files.txt
文件中。
2>
- 标准错误重定向:用于将命令的标准错误(STDERR)重定向到一个文件中。
例如:
ls non_existent_directory 2> error.txt
会将错误消息保存到error.txt
文件中。
&>
- 标准输出和标准错误同时重定向:用于将命令的标准输出和标准错误都重定向到同一个文件中。
例如:
ls > all_output.txt 2>&1
或ls &> all_output.txt
会将所有输出都保存到all_output.txt
文件中。
>>
- 追加到文件:用于将输出追加到现有文件的末尾,而不是覆盖它。
例如:
echo "new line" >> existing_file.txt
会将new line
添加到existing_file.txt
文件的末尾。
<
- 标准输入重定向:用于将文件的内容作为命令的输入。
例如:
sort < unsorted.txt
会将unsorted.txt
文件的内容作为sort
命令的输入。
<<
- Here文档(Here Document):用于将接下来的输入直到一个定界符作为命令的标准输入。
例如:
cat <<EOF line 1 line 2 EOF
这将输出
line 1
和line 2
。
<<<
- Here字符串(Here String):用于将一个字符串作为命令的标准输入。
例如:
grep "word" <<< "search for word"
会在给定的字符串中搜索"word"。
|
- 管道:用于将一个命令的输出作为另一个命令的输入。
例如:
ls | grep "txt"
会列出所有文件,然后只显示包含"txt"的行。
这些重定向和管道的使用非常灵活,可以根据需要组合使用来实现复杂的数据流控制。
为了避免权限问题,您可以尝试只在您的用户目录下或其他非系统目录中运行搜索命令。例如:
find ~ -name "*yunshu*"
这将只在您的用户目录(由~
表示)和其子目录中搜索文件名包含"yunshu"的文件。
如果您想避免这些权限错误,可以将错误消息重定向到/dev/null
,这样就只会看到成功的搜索结果:
find / -name "*yunshu*" 2>/dev/null
这里2>/dev/null
是将标准错误(所有的错误消息)重定向到/dev/null
,这是一个特殊的文件,会丢弃所有写入它的数据。这样您的输出中就只包含成功找到的文件路径了。