実行しようとしているコマンドを変更する方法はありますか? 出力をファイルにリダイレクトし、端末に出力したいと思います。それがうまくいくことがわかったので、実行しようとしているコマンドにそれls > file.txt | cat
を追加したいと思います。
ファイルにリダイレクトして端末に出力するより良い方法はありますか? ロガーを作ろうとしています。> file.txt | cat
2 に答える
行を実行したときに実行されるアクションを変更して、実行されるコマンドを変更できます。これは、Enter キーにバインドする関数を定義することで実行できます。
まず、'> file.txt | を追加できる関数を定義しましょう。cat' は、任意のコマンドの末尾に:
function log_and_accept {
BUFFER="$BUFFER > file.txt | cat"
zle accept-line
}
次の部分では、デフォルトのエンター キーの動作を実際に新しい関数に置き換えます。置き換えるデフォルトの動作は accept-line 関数です。zle のドキュメントを見ると、accept-line が ^J と ^M にバインドされていることがわかります。
この関数をこれらの文字にバインドするには、最初にウィジェットに変換する必要があります。
zle -N log_and_accept_widget log_and_accept
次に、古い動作を置き換えてバインドできます。
bindkey '^J' log_and_accept_widget
bindkey '^M' log_and_accept_widget
これで、実行するすべてのコマンドに対してそのコマンドが展開されます。すべての 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
これには気をつけたほうがいいと思います。少しテストした後、すぐに嫌いになりました。
それにはいくつかの方法がありますが、私が最も気に入っているのは、ここで見つけたこのブロックです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'
リストに追加したことにも注意してくださいabk
fc
コマンドの後に入力してから(,.コンマとピリオド)をすばやく連続して押すと、zshが置き換えfc
られます> file.txt | cat