bka*_*ase 1 unix linux shell zsh
我想记录我最近的cd
任何一个终端.我认为这样做的好方法是编写一个简单的bash脚本包装cd
:
#!/bin/bash
cd $1 && echo `pwd` > /tmp/.cwd
Run Code Online (Sandbox Code Playgroud)
既然我希望cd
在我的终端进程中发生,我需要运行脚本. bettercd.sh
,对吗?
我的问题出现了:如果我cd
对这个新的别名. bettercd.sh
,我的shell也会cd
使用. bettercd.sh
- 无限递归扩展脚本内部.
有没有办法cd
从不同的名称调用但具有相同的行为?换句话说,是否有一些命令行为完全(或非常相似)cd
我可以在我的shell脚本中使用而不会在我cd
每天使用别名时注意到差异?
我选择的shell是zsh,如果这在某种程度上是相关的.
谢谢你的帮助.
由于您使用的是zsh,因此可以builtin cd
代替使用cd
.这会强制shell使用内置命令而不是递归调用别名.
builtin
在标准的bourne shell中不存在.如果你需要这个在其他shell中工作,请尝试使用反斜杠前缀cd,如下所示:\cd
.它可以绕过别名而不是shell函数.
zsh
提供chpwd_functions
钩子功能专门为这样的工具.如果定义一个函数将新目录附加到文件并将该函数添加到chpwd_functions
数组中,则每次更改目录时它都会自动运行例程 - 无论是for pushd
popd
还是cd
:
$ record_pwd() { pwd > /tmp/cwd }
$ chpwd_functions=(record_pwd)
$ cd /tmp ; cat /tmp/cwd
/tmp
$ cd /etc ; cat /tmp/cwd
/etc
$
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
745 次 |
最近记录: |