[20170705]diff比较执行结果的内容.txt
--//有时候需要比较2个命令输出的结果进行比较,比较笨的方法如下,例子:$ lsnrctl status LISTENER_SCAN2 > /tmp/b2.txt$ lsnrctl status LISTENER_SCAN3 > /tmp/b3.txt$ diff -Nur /tmp/b2.txt /tmp/b3.txt--//很明显这样要生成2个文件,然后比较,实际上利用shell可以很简单的实现.$ lsnrctl status LISTENER_SCAN3 | diff /tmp/2.txt ---//这样减少1个文件的生成,可以再减少文件生成吗?$ diff <(lsnrctl status LISTENER_SCAN2) <(lsnrctl status LISTENER_SCAN3)--//如何理解呢?$ echo <(lsnrctl status LISTENER_SCAN2) <(lsnrctl status LISTENER_SCAN3)/dev/fd/63 /dev/fd/62--//实际上62,63就是打开的文件句柄.当然执行完马上关闭.$ ls -l /dev/fdlrwxrwxrwx 1 root root 13 2014-12-11 02:24:57 /dev/fd -> /proc/self/fd$ ls -l /dev/fd/total 0lrwx------ 1 grid oinstall 64 2017-07-05 16:16:07 0 -> /dev/pts/4lrwx------ 1 grid oinstall 64 2017-07-05 16:16:07 1 -> /dev/pts/4lrwx------ 1 grid oinstall 64 2017-07-05 16:16:07 2 -> /dev/pts/4lr-x------ 1 grid oinstall 64 2017-07-05 16:16:07 3 -> /proc/101318/fd--//写一个简单的shell脚本就很好理解了(注意这种写法不是很严谨):--//我直接读取句柄63,62的内容.$ cat a.sh#! /bin/bashecho <(lsnrctl status LISTENER_SCAN2) <(lsnrctl status LISTENER_SCAN3)diff /dev/fd/63 /dev/fd/62$ . a.sh/dev/fd/63 /dev/fd/626c6< Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=IPC)(KEY=LISTENER_SCAN2)))---> Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=IPC)(KEY=LISTENER_SCAN3)))9c9< Alias LISTENER_SCAN2---> Alias LISTENER_SCAN311,12c11,12< Start Date 30-JUN-2017 12:00:03< Uptime 5 days 4 hr. 18 min. 37 sec---> Start Date 30-JUN-2017 12:00:58> Uptime 5 days 4 hr. 17 min. 43 sec17c17< Listener Log File /u01/app/11.2.0.4/grid/network/log/listener_scan2.log---> Listener Log File /u01/app/11.2.0.4/grid/network/log/listener_scan3.log19,20c19,20< (DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(KEY=LISTENER_SCAN2)))< (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=192.168.100.109)(PORT=1521)))---> (DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(KEY=LISTENER_SCAN3)))> (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=192.168.100.107)(PORT=1521)))--//想到这里,我终于理解exp/imp on the fly.例子:$ exp scott/book file=>(gzip >t.dmp.gz) tables=emp$ imp scott/book full=y file=<(gunzip <t.dmp.gz)