Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/kubernetes/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
ZSH:在每张cd后自动运行ls_Zsh - Fatal编程技术网

ZSH:在每张cd后自动运行ls

ZSH:在每张cd后自动运行ls,zsh,Zsh,所以我现在让ZSH做了所有这些很酷的事情,但如果我每次调用“cd”后都能让它隐式运行“ls-a”,那将是非常棒的。我想这必须放在.zlogin文件或.alias文件中,我只是不确定最好的解决方案是什么。思想?标准物质?将下列物质放入.zshrc中: 编辑: 在查看文档(zshbuiltins,cdbuiltin的描述或)之后,我找到了一个更好的方法:使用chpwd函数: function chpwd() { emulate -L zsh ls -a } 或使用chpwd_函

所以我现在让ZSH做了所有这些很酷的事情,但如果我每次调用“cd”后都能让它隐式运行“ls-a”,那将是非常棒的。我想这必须放在.zlogin文件或.alias文件中,我只是不确定最好的解决方案是什么。思想?标准物质?

将下列物质放入.zshrc中:

编辑: 在查看文档(
zshbuiltins
cd
builtin的描述或)之后,我找到了一个更好的方法:使用
chpwd
函数:

function chpwd() {
    emulate -L zsh
    ls -a
}
或使用
chpwd_函数
数组:

function list_all() {
    emulate -L zsh
    ls -a
}
chpwd_functions=(${chpwd_functions[@]} "list_all")
简短版本

autoload -U add-zsh-hook
add-zsh-hook -Uz chpwd (){ ls -a; }

快速解释这里发生了什么

autoload -U add-zsh-hook
这一行基本上只加载贡献的函数
addzsh hook

add-zsh-hook -Uz chpwd (){ ls -a; }
每个函数都有一个函数数组,当该函数被触发时(如通过更改目录)将被调用。此行向该数组添加一个函数。要打破它

add-zsh-hook -Uz chpwd
本部分规定我们将向
chpwd
特殊函数添加一个新函数。
-Uz
通常是推荐的参数,它们被传递给用于函数参数的自动加载(即下一位)


第二部分是功能。它通常被称为匿名函数。这是一个尚未指定名称的函数。它不需要名称,因为它只是在一个数组中运行。

我不知道为什么会出现这种情况,或者这是否更好,但我发现在.zshrc中也适用。看起来比大多数答案都要短,虽然可能是遗漏了一些我不明白的东西


chpwd()ls-a

这非常有效,我忘了提到我已经打开了自动cd,所以这只在我显式调用“cd”时有效。有没有办法让它在我更改目录时以这种方式运行?什么是
emulate-LR zsh
for?@moo
man zshbuiltins
。重置一些选项(此处:在当前函数的持续时间内),此处不是真正需要的,但最好在每个函数的开始处放置
emulate zsh
/
emulate-L zsh
,以便您知道此函数不会因用户设置的任何内容而中断
-R
是一种过度使用,它会重置所有选项。这对我来说很有效,我想继续使用它,但我的一台计算机速度非常慢,所以我不想这样做。如果我从另一个点文件
source
d它,如何覆盖它?我假设我只是将函数复制到特定于主机的
.zshrc
并删除
ls-a
。最后一个选项的缺点是每次
source.zshrc
时都将
list\u all
附加到
chpwd\u函数中,从而导致对
ls-a
的额外调用被触发!这是可行的,但它太脏了,我花了几个小时挖掘手册页来理解。根据zsh文档,第二行应该分配一个函数体
ls-a
多个名称:
添加zsh hook
-Uz
chpwd
(它有效地做到了这一点)。但同时,它确实使用所有这些参数执行原始的
addzshhook
。为什么?注意,与下面使用chpwd相比,这种方法的优点是,它允许您将任意数量的新函数添加到一个特殊函数中。除了这里提到的
ls
之外,我还可以设置终端标题和检查本地历史文件。
add-zsh-hook -Uz chpwd
(){ ls -a; }