2012-09-25 10 views
6

実行しようとしているコマンドを変更する方法はありますか? 出力をファイルにリダイレクトするだけでなく、端末に出力したいと思います。 ls > file.txt | catがジョブを実行していることがわかりましたので、実行しようとしているコマンドに> file.txt | catを追加します。
ファイルにリダイレクトして端末にプリントするより良い方法はありますか?私はロガーを作ろうとしています。zsh preexecコマンドの変更

+1

teeはここで使用するコマンドです。> file |猫はかなり混乱しています –

答えて

0

http://git.grml.org/?p=grml-etc-core.git;a=blob_plain;f=etc/zsh/zshrc;hb=HEAD

abk=(
    '...' '../..' 
    '....' '../../..' 
    'BG' '& exit' 
    'C' '| wc -l' 
    'G' '|& grep '${grep_options:+"${grep_options[*]}"} 
    'H' '| head' 
    'Hl' ' --help |& less -r' #d (Display help in pager) 
    'L' '| less' 
    'LL' '|& less -r' 
    'M' '| most' 
    'N' '&>/dev/null'   #d (No Output) 
    'R' '| tr A-z N-za-m'  #d (ROT13) 
    'SL' '| sort | less' 
    'S' '| sort -u' 
    'T' '| tail' 
    'V' '|& vim -' 
    'co' './configure && make && sudo make install' 
    'fc' '> file.txt | cat' 
) 

zleiab() { 
    emulate -L zsh 
    setopt extendedglob 
    local MATCH 

    if ((NOABBREVIATION > 0)) ; then 
     LBUFFER="${LBUFFER},." 
     return 0 
    fi 

    matched_chars='[.-|_a-zA-Z0-9]#' 
    LBUFFER=${LBUFFER%%(#m)[.-|_a-zA-Z0-9]#} 
    LBUFFER+=${abk[$MATCH]:-$MATCH} 
} 

zle -N zleiab && bindkey ",." zleiab 

また、私はリストに'fc' '> file.txt | cat'を追加したことがわかり、私が一番好きな1、私はここで見つけるこのブロックそれを行うには、いくつかの方法があります、これは中に何abk

コマンドの後にfcと入力してからを押したとします。(コンマとピリオド)矢継ぎ早とzshの中には、あなたが実行されるコマンドを変更する行を実行するときに実行されるアクションを変更することができます> file.txt | cat

5

ためfcに置き換えられます。これは、Enterキーにバインドする関数を定義することによって実行できます。

まず、 '> file.txt |'を追加できる関数を定義します。どのコマンドでも終了する「cat」は次のようになります。次の部分は、実際にデフォルトのEnterキーの動作を新しい機能に置き換えることです。置き換えられるデフォルトの動作はaccept-line関数です。zle documentationを見ると、accept-lineは^ Jと^ Mに束縛されています。

bindkey '^J' log_and_accept_widget 
bindkey '^M' log_and_accept_widget 

は今、あなたは次のようになります。以前の動作を置き換え、

zle -N log_and_accept_widget log_and_accept 

は、その後、あなたがそれをバインドすることができます。

は、あなたが最初のウィジェットにそれを有効にする必要があり、それらの文字にこの機能をバインドするにはそのコマンドを1つのコマンドごとに展開します。すべてのCDには、LSは、vimのなどなどそのように私はあなたが実際にこのオン・オフのカップルより多くの機能を定義することをお勧めします:

function turn_on_logging { 
    bindkey '^J' log_and_accept_widget 
    bindkey '^M' log_and_accept_widget 
} 
function turn_off_logging { 
    bindkey '^J' accept-line 
    bindkey '^M' accept-line 
} 

zle -N turn_on_logging_widget turn_on_logging 
zle -N turn_off_logging_widget turn_off_logging 

bindkey '^P' turn_on_logging_widget 
bindkey '^O' turn_off_logging_widget 

私はあなたがこれには注意すべきだと思います。それを少しテストした後、私はすぐにそれを嫌うようになった。

関連する問題