Rob*_*ohr 57 command-line bash cd-command
我发现我经常做以下事情:
%> cd bla/bla
%> ls
Run Code Online (Sandbox Code Playgroud)
我希望每当我cd
进入目录时它会自动执行ls
.
我摆弄.bashrc
了一段时间,但不知道如何让它发生。
Ste*_*ski 63
你可以用一个函数来做到这一点:
$ cdls() { cd "$@" && ls; }
Run Code Online (Sandbox Code Playgroud)
的&&
意思是“cd
到一个目录下,如果成功(例如目录存在),运行ls
”。使用&&
运算符比;
在两个命令之间使用分号运算符更好,就像{ cd "$@"; ls; }
. ls
无论是否有效,第二个命令都会运行cd
。如果cd
失败,ls
将打印您当前目录的内容,这会让用户感到困惑。作为最佳实践,使用&&
而不是;
。
$ cdls /var/log
CDIS.custom fsck_hfs.log monthly.out system.log
$ pwd
/var/log
Run Code Online (Sandbox Code Playgroud)
一般来说,重命名已经存在的命令是一种不好的做法,特别是对于像cd
. 相反,创建一个具有不同名称的新命令。如果您cd
使用一个也名为 的函数或别名进行覆盖cd
,那么当您进入一个包含 100,000 个文件的目录时会发生什么?有许多实用程序使用cd
,它们可能会对这种不寻常的行为感到困惑。如果您使用共享帐户(例如root
当您与其他系统管理员一起工作时),替换现有命令可能非常危险,因为环境与人们期望的不同。
fra*_*ous 47
我的 .bashrc 中有这个,它工作正常。
function cd {
builtin cd "$@" && ls -F
}
Run Code Online (Sandbox Code Playgroud)
在我的 .bashrc 早些时候,我有: [ -z "$PS1" ] && return
,并且该行之后的所有内容仅适用于交互式会话,因此这不会影响cd
脚本中的行为。
Sté*_*las 17
题外话,因为这个问题被标记为 /bash,但因为有些问题是作为这个没有提到 bash 的问题的副本而关闭的:
使用 zsh:
chpwd() ls
Run Code Online (Sandbox Code Playgroud)
chpwd() 函数在当前目录更改时(通过 cd、pushd、popd...)由 zsh 调用。tcsh 有一个类似的功能,可能是 zsh 的来源。
小智 6
为什么不在 .bashrc 文件中添加别名?
就像是:
alias cdls='cd "$@" && ls'
Run Code Online (Sandbox Code Playgroud)