天天看點

[20170705]diff比較執行結果的内容.txt

[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/fd

lrwxrwxrwx 1 root root 13 2014-12-11 02:24:57 /dev/fd -> /proc/self/fd

$  ls -l /dev/fd/

total 0

lrwx------ 1 grid oinstall 64 2017-07-05 16:16:07 0 -> /dev/pts/4

lrwx------ 1 grid oinstall 64 2017-07-05 16:16:07 1 -> /dev/pts/4

lrwx------ 1 grid oinstall 64 2017-07-05 16:16:07 2 -> /dev/pts/4

lr-x------ 1 grid oinstall 64 2017-07-05 16:16:07 3 -> /proc/101318/fd

--//寫一個簡單的shell腳本就很好了解了(注意這種寫法不是很嚴謹):

--//我直接讀取句柄63,62的内容.

$  cat a.sh

#! /bin/bash

echo  <(lsnrctl status LISTENER_SCAN2) <(lsnrctl status LISTENER_SCAN3)

diff /dev/fd/63 /dev/fd/62

$  . a.sh

6c6

< Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=IPC)(KEY=LISTENER_SCAN2)))

---

> Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=IPC)(KEY=LISTENER_SCAN3)))

9c9

< Alias                     LISTENER_SCAN2

> Alias                     LISTENER_SCAN3

11,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 sec

17c17

< 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.log

19,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)