有没有一种方法可以修改即将执行的命令?
我想将输出重定向到文件,并在终端上打印出来。
我发现ls > file.txt | cat
可以完成任务,因此我想将> file.txt | cat
添加到任何即将执行的命令中。
有更好的方法将输出重定向到文件并打印到终端吗?我正在尝试创建一个日志记录器。
function log_and_accept {
BUFFER="$BUFFER > file.txt | cat"
zle accept-line
}
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将用> file.txt | cat
替换fc