zsh preexec命令修改
有没有办法修改即将执行的命令? 我想将输出重定向到一个文件,并在终端上打印它。 我发现zsh preexec命令修改,zsh,zsh-zle,Zsh,Zsh Zle,有没有办法修改即将执行的命令? 我想将输出重定向到一个文件,并在终端上打印它。 我发现ls>file.txt | cat完成了这项工作,因此我想将>file.txt | cat添加到即将执行的任何命令中。 是否有更好的方法重定向到文件并打印到终端?我正在尝试制作一个记录器。有几种方法可以做到这一点,我最喜欢的是我在这里找到的这一块 还请注意,我将'fc'>file.txt | cat'添加到列表abk 在命令后键入fc,然后点击,。(逗号和句点)快速连续,zsh将替换>fcfor>file.tx
ls>file.txt | cat
完成了这项工作,因此我想将>file.txt | cat
添加到即将执行的任何命令中。是否有更好的方法重定向到文件并打印到终端?我正在尝试制作一个记录器。有几种方法可以做到这一点,我最喜欢的是我在这里找到的这一块 还请注意,我将
'fc'>file.txt | cat'
添加到列表abk
在命令后键入
fc
,然后点击,。(逗号和句点)快速连续,zsh将替换>fc
for>file.txt | cat
您可以更改执行行时执行的操作,以更改将执行的命令。这可以通过定义一个函数来完成,然后将该函数绑定到enter键
让我们首先定义一个函数,该函数可以将'>file.txt | cat'结尾添加到任何命令:
function log_and_accept {
BUFFER="$BUFFER > file.txt | cat"
zle accept-line
}
下一部分是用新函数实际替换默认的enter键行为。我们正在替换的默认行为是accept行函数,如果我们查看,您将看到accept行绑定到^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
我想你应该小心点。经过一点测试后,我很快就不喜欢它了。tee是这里要使用的命令,>file | cat非常混乱
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