在学习的过程中,不仅要输入知识,也要运用知识,更要选择性的丢弃某些东西。
SHELL=[ 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 , 10 ]
progress:[################## ] 90%
Ax Shell Input/Output Redirections | 学思
万物都轮回的,两面性的,好的坏的,真的假的,有的没的,数据也是如此,有进来的也有出去的。
系统命令从终端接收输入,然后将结果输出发送会终端。
Output Redirection | 输出重定向
用于标准输出的命令也可以输出重定向到文件中。
使用> 重定向到文件,而不是终端
例
$ who > users
终端不会有任何显示
$ cat users
oko tty01 Sep 12 07:30
ai tty15 Sep 12 13:32
ruth tty21 Sep 12 10:10
pat tty24 Sep 12 13:07
steve tty25 Sep 12 13:03
$
但如果文件存在数据,会将数据覆盖。 −
$ echo line 1 > users
$ cat users
line 1
$
如果不想覆盖,使用>>
操作符 −
$ echo line 2 >> users
$ cat users
line 1
line 2
$
Input Redirection | 输入重定向
同样,文件也可以作为命令的输入,使用<
操作符。
$ wc -l users
2 users
$
重定向到命令统计行数 −
$ wc -l < users
2
$
因为使用了重定向,wc命令只知道输入的内容,并不知道文件名。
Here Document | Here 文档
here document 用于将输入重定向到交互式shell脚本或程序中。
通过为交互shell脚本提供输入,可以在脚本中运行交互程序,无需用户操作。
例 −
command << delimiter
document
delimiter
<<
读取输入的指令,直到找到指定分隔符的行,然后将分隔符内的内容提供给标准输入。
没有分隔符将永远等待输入。分隔符是一个不能有空格和制表符的单词。
下面是一个计算总数的操作 −
$wc -l << EOF
This is a simple lookup program
for good (and bad) restaurants
in Cape Town.
EOF
3
$
放入脚本中 −
#!/bin/sh
cat << EOF
This is a simple lookup program
for good (and bad) restaurants
in Cape Town.
EOF
执行 −
This is a simple lookup program
for good (and bad) restaurants
in Cape Town.
将文本保持到文件中,打开一个vi会话.
如果你使用vim,将会报错如下 −
$ sh test.sh
Vim: Warning: Input is not from a terminal
$
运行脚本后,就会看文件内已经有了内容 −
$ cat test.txt
This file was created automatically from
a shell script
$
Discard the output | 丢弃输出
如果不希望命令执行的输出显示在屏幕上,可以重定向到 /dev/null −
$ command > /dev/null
null会丢弃所有的输入
如果需要将错误输出也丢弃,将错误输出重定向到标准输出
$ command > /dev/null 2>&1
2表示 STDERR (标准错误,1表示标准输出。通过将标准输出重定向标准错误,可以将消息显示在标准错误中。
$ echo message 1>&2
Redirection Commands | 重定向命令
重定向命令列表 −
Sr.No. | Command & Description |
---|---|
1 | pgm > file 输出重定向 |
2 | pgm < file 输入重定向 |
3 | pgm >> file 追加输出重定向 |
4 | n > file将文件描述符输出重定向 |
5 | n >> file追加输出文件描述符重定向 |
6 | n >& m将流n与m合并 |
7 | n <& m 将流n与m合并 |
8 | << tag 标准输入标记内的内容 |
9 | | 从一个程序或进程获取的输出发送给另一个进程 |
PS:0 是标准输入,1是标准输出,2是标准错误