[20190108]rlwrap sqlplus tee相關問題.txt
[20190108]rlwrap sqlplus tee相關問題.txt
--//這個問題一直困擾我很久.如果我執行:
rlwrap sqlplus scoott/book | tee -a aa.txt
--//這樣sqlplus視窗有1個小毛病,就是提示符要回車才顯示,有什麼好方法解決這個問題.實際上就是tee快取一行沒有輸出.
--//向一些命令都有1個規避快取的命令列引數.比如tcpdump 的-l引數,sed -u引數.
--//而tee沒有引數控制這樣的行為.
--//expect包裡面包含一個unbuffer,可以禁止輸出快取.
--//一些新版本linux版本的coreutils包裡面包括一個命令stdbuf(Red Hat Enterprise Linux Server release 7.5就有這個命令)
--//我自己也做了一些嘗試,都是不行,如下方式不行.
$ rlwrap sqlplus sys as sysdba | stdbuf -i0 -o0 -e0 tee -a /tmp/aa.txt
$ rlwrap sqlplus scott/book | unbuffer -p tee -a /tmp/aa.txt
--//開始看rlwrap文件,我發現實際rlwrap提供filter功能.充分利用這個功能就可以實現:
# rlwrap -z listing
The following filters can be found in /usr/local/share/rlwrap/filters
count_in_prompt replace prompt by simple counter
ftp_filter run plain Netkit ftp with completion for commands, local and remote files
history_format Append <format> to every history item, and strip it off again when input is accepted
logger log messages to a file (for debugging)
null a filter that does nothing
paint_prompt paint the prompt in colour gradient between X11 colours <colour1> and <colour2>
pipeline combines the effects of 2 or more filters
pipeto Allow piping of <command> output through pagers or other shell commands
scrub_prompt removes all junk from prompt
simple_macro simple on-the-fly macro processing
template filter template
unbackspace remove backspaces from output
--//做了嘗試不行.開始google,百度.發現如下連結,裡面提供一個outfilter指令碼.連結如下:
--//
# cd /usr/local/share/rlwrap/filters
# vim outfilter
#! /usr/bin/perl
use lib ($ENV{RLWRAP_FILTERDIR} or ".");
use RlwrapFilter;
use strict;
my $filter = new RlwrapFilter;
my $name = $filter->name;
my $filter_command = join ' ', @ARGV;
$filter->help_text("Usage: rlwrap -z '$name <filter-command>' <command>\n"
. "Filter <command> output through <filter-command>");
$filter->output_handler(sub {""});
$filter->prompt_handler(\&prompt);
$filter->run;
sub prompt {
my $prompt = shift;
my $output = $filter->cumulative_output;
$output =~ s/\r//g;
open (PIPE, "| $filter_command")
or die "Failed to create pipe: $!";
print PIPE $output;
close PIPE;
return $prompt;
}
# chmod 755 outfilter
$ rlwrap -z 'outfilter tee -a /tmp/aa.txt' sqlplus scott/book
--//現在沒有問題了.
--//利用這個功能透過/tmp/aa.txt實現過濾功能.
--//例如在另外的終端執行如下,終端2:
$ tail -f /tmp/aa.txt |grep -i SUPP
--//在終端1 sqlplus下執行:
SCOTT@book> @ desc v$database ;
--//終端2輸出如下:
30 SUPPLEMENTAL_LOG_DATA_MIN VARCHAR2(8)
31 SUPPLEMENTAL_LOG_DATA_PK VARCHAR2(3)
32 SUPPLEMENTAL_LOG_DATA_UI VARCHAR2(3)
40 SUPPLEMENTAL_LOG_DATA_FK VARCHAR2(3)
41 SUPPLEMENTAL_LOG_DATA_ALL VARCHAR2(3)
51 SUPPLEMENTAL_LOG_DATA_PL VARCHAR2(3)
--//這樣就是知道那個欄位對應位置,ctrl+c,然後執行如下:
$ tail -f /tmp/aa.txt |cut -d"|" -f1,2,30,31,32,40,41,51
--//終端1執行如下:
SCOTT@book> set linesize 3000
SCOTT@book> set colsep |
SCOTT@book> select * from v$database ;
--//終端2可以看到輸出如下:
DBID|NAME |SUPPLEME|SUP|SUP|SUP|SUP|SUP
----------|--------------------|--------|---|---|---|---|---
1337401710|BOOK |NO |NO |NO |NO |NO |NO
--//這樣就可以實現類似我以前連結寫的功能:http://blog.itpub.net/267265/viewspace-2285749/
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/267265/viewspace-2375095/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- [20190110]rlwrap sqlplus tee相關問題3.txtSQL
- rlwrap sqlplus in linuxSQLLinux
- [20180413]熱備模式相關問題.txt模式
- Docker 相關問題Docker
- django相關問題Django
- electron相關問題
- [20180413]熱備模式相關問題2.txt模式
- [20160113]sqlplus使用問題.txtSQL
- Java相關問題整理Java
- PHP相關問題集合PHP
- 大模型相關問題大模型
- rlwrap sqlplus下的回顯工具SQL
- rlwrap包解決Linux下sqlplus中上下鍵,退格鍵不能用的問題LinuxSQL
- 關於tee指令
- 轉載__sqlplus相關tipSQL
- [20190929]bash使用bc計算的相關問題.txt
- mysql相關問題總結MySql
- 個人專案相關問題
- Sql Mode及相關問題SQL
- Oracle MTS的相關問題Oracle
- 瀏覽器相關問題瀏覽器
- python pip相關問題Python
- RUST所有權相關問題Rust
- rlwrap的安裝使用 [SQLPlus上下鍵]SQL
- [20191220]關於共享記憶體段相關問題.txt記憶體
- 關於盒模型相關的問題模型
- 關於 go-micro 相關問題Go
- [20221203]sqlplus set trimspool 問題.txtSQL
- [20171113]修改表結構刪除列相關問題.txt
- 【Oracle】-【sqlplus相關】-serveroutput引數OracleSQLServer
- 中介軟體相關問題整理
- java語言相關的問題Java
- Spring相關問題記錄Spring
- 面試遇到的redis相關問題面試Redis
- 資料庫事物相關問題資料庫
- SpringBoot-相關問題Spring Boot
- Oracle kill session相關問題(上)OracleSession
- Oracle kill session相關問題(下)OracleSession