shell学习笔记之八——重定向、文件包含
-
输入、输出重定向
- cmd > file 输出重定向到file
- cmd < file 输入重定向到file
- cmd >> file 输出追加到file
- n > file 文件描述符为n的文件重定向到file
- n >> file 文件描述符为n的文件追加方式地重定向到file
- n >& m 把输出m和n合并
- n <& m 把输入m和n合并
- << tag 把开始标记tag和结束标记tag直接的内容作为输入
输出重定向
command > file #比如 who > users
输入重定向
command < file #从文件读取 #综合以上两个可以 command < file1 > file2
深入理解重定向
一般情况下,每个 Unix/Linux 命令运行时都会打开三个文件:
- 标准输入文件(stdin):stdin的文件描述符为0,Unix程序默认从stdin读取数据。
- 标准输出文件(stdout):stdout 的文件描述符为1,Unix程序默认向stdout输出数据。
- 标准错误文件(stderr):stderr的文件描述符为2,Unix程序会向stderr流中写入错误信息。
- 默认情况下,command > file 将 stdout 重定向到 file,command < file 将stdin 重定向到 file。
如果希望 stderr 重定向到 file,可以这样写:
command 2 > file
如果希望将stdout和stderr合并后重定向,可以这样写:
command > file 2>&1
Here Document
这是特殊的一种重定向
command << tag #开始的tag前后的空格会被忽略 document tag #tag可以是字符串、符号、EOF等 ,但是一定要顶格写,前后不能有任何字符
它会将两个tag之间的内容(document)作为输入传给command
/dev/null文件
如果希望执行某个命令,但又不希望在屏幕上显示输出结果,那么可以将输出重定向到 /dev/null:
command > /dev/null
/dev/null 是一个特殊的文件,写入到它的内容都会被丢弃;如果尝试从该文件读取内容,那么什么也读不到。但是
/dev/null 文件非常有用,将命令的输出重定向到它,会起到"==禁止输出=="的效果。
如果希望屏蔽 stdout 和 stderr,可以这样写:
command > /dev/null 2>&1
文件包含
相当于引用外部脚本
. filename #或者 source filename
被包含的文件不需要可执行权限
demo
比如在demo中创建两个shell脚本,其中一个脚本中给出变量num,并且在另一个脚本中使用
#!/bin/bash #这是test1.sh num=233333
#!/bin/bash #这是test2.sh . ./test2.sh #或者 #source ./test2.sh echo "233333,read after me" echo $num