stream: 标准输入,标准输出,标准错误
pipe: 命令的串联使用
process:使用 stream + pipe 写好的 program 在成功完成或报错前都是进程
nohup法:使用nohup为例说明 流(Stream)和 重定向(Redirection)
# 末尾加 & 能让程序在后台运行的同时,我们也能获得交互shell的能力,注意要指定路径
$ program1 input.txt > results.txt & # 语法
$ nohup ./detelOut.sh & # 举例
# linux中有三种标准流(stream),分别是Standard Input,Standard Out,Standard Error,对应的数字是0,1,2
$ nohup command > myout.file 2>&1 & # 将所有输出的信息写入myout.file
$ nohup ./Cox.sh > STDOUT.txt 2> stderr.txt & # 后台运行Cox.sh,将标准输出到STDOUT.txt文件中,将标准错误输出到stderr.txt文件中
$ nohup ./Cox.sh >> STDOUT.txt 2>> stderr.txt & # >> 不覆盖文件中原有内容,会将新内容加在末尾; > 操作符会覆盖已有内容,谨慎使用
$ nohup ./Cox.sh >> /dev/null/STDOUT.txt 2>> /dev/null/stderr.txt & # /dev/null/ 可以存放这类日志的黑洞!!!(新知识呢!!)
前台运行 与 后台运行
# 将后台运行的进程改为前台运行
$ jobs # 查看有哪些后台运行的进程
$ fg %1 # 将目标进程改为前台进程,fg + job ID num
# 将前台运行的进程改为后台运行
$ # enter Control + Z #暂停进程 (Control + C 是 kill 进程)
$ bg %1 # 将目标进程改为后台进程,bg + job ID num
监督重定向的标准错误输出文件(在运行比较久的程序时很需要)
# 参数-n可以设置查看文件的最末尾的行数
$ tail -n
# 参数-nf (follow),可以实时输出末尾n行,供参看
$ ail -f
tee : 保存 program1 的输出到中间文件和重定向到 program2 的标准输入
$ program1 input.txt | tee intermediate-file.txt | program2 > results.txt
Exit status
# 语法
$ program1 input.txt > results.txt # 进程
$ echo $? # 查看上面进程的 exit status
# 举例
$ true
$ echo $?
0 # exit status 为0时,表示进程成功运行
$ false
$ echo $?
1 # exit status 不为0时,表示进程中出现错误或 occurred
# 使用 逻辑运算符 && 和 ||: a subsequent command in a chain is run conditionally on the last command's exit status.
$ program1 input.txt > intermediate-results.txt && program2 intermediate-results.txt > input.txt # 只有当 program1 的exit status 为0时(运行成功),program2 才会运行
$ program1 input.txt > intermediate-results.txt || program2 intermediate-results.txt > input.txt # 只有当 program1 的exit status 不为0时(运行出错),program2 才会运行
# 举例
$ true && echo " last command was a success"
last command was a success
$ false && echo " last command was a success"
$ false || echo " last command was not a success"
last command was not a success
$ true || echo " last command was not a success"
命令的替换 $, alias
$ grep -c '^>' input.fasta
416
$ echo "There are $(grep -c '^>' input.fasta) entries in my FASTA file"
There are 416 entries in my FASTA file
$ mkdir results-$(data +%F)
$ ls
results-2019-06-22
# 在 ```~/.bashrc```(Linux) 或 ```~/.profile``` (OS X) 添加快捷命令
alias mkpr = "mkdir -p {data/seqs,scripts,analysis}"
alias today = "data +%F"