[神奇的文件描述符2]
文件描述符
0: 标准输入; 1: 标准输出; 2: 标准错误输出; 因此我们使用3-9
$CMD >> xx.log 2>&1 什么意思?
* 执行$CMD命令, 将其标准输出重定向至xx.log, 在文件末尾添加(>>), 同时将标准错误输出也指向标准输出(即也输出至xx.log)
我们可以使用3~9的文件描述符来描述自定义的文件, 上一讲中说到循环中有ssh命令会导致循环失效, 然而使用文件描述符就不会再有这样的情况. 因此我们通常的使用方式是:
#! /bin/bash echo -e "1\n2\n3\n4" > "$0.txt"; exec 3<> $0.txt #注意3和<>之间没有空格 while read line <& 3 #注意此处写在while行之后, 而不是done之后 do echo "$line"; ssh "db-testing-ps1833.db01" "ls > /dev/null" done
这样的话, 输出的结果就是符合我们预期的4行内容啦!
[神奇的文件描述符3]
#!/bin/bash lftp ftp://db-testing-ps1833.db01/home/work/mc-tools <<! ls -l; bye; ! ssh db-testing-ps1833.db01 <<! ls /home/work/mc-tools ! <<COMMENT echo hello COMMENT
看看以上这段代码, 其中使用了这样的形式:
<<delimiter
****
delimiter
它的用处一般有两个:
1. 交互式的行为, 例如通过lftp远程执行命令; ssh远程执行命令等
2. 注释(多行注释)
其中delimiter只要前后确认相同即可, 一般可以使用一些有意义的, 比如COMMENT表示注释之类
本文链接:https://www.poisonbian.com/post/215.html 转载需授权!