如何在linux中自动`cd`然后*`ls`?

chu*_*tsu 7 linux bash shell ls

我发现自己在很长一段时间内一直在cd some_dir快速ls完成,并且一直在尝试编写一个 bash 别名来让我这样做,例如:

alas cd="cd $@; ls";
Run Code Online (Sandbox Code Playgroud)

问题是你不能在别名中间有输入参数(如果我错了,请纠正我)。

我还尝试按照此页面的建议定义自己的 shell 函数:

cd() { cd "$@"; ls; }
Run Code Online (Sandbox Code Playgroud)

但是这个问题是,如果我尝试像这样使用它:

cd Documents
Run Code Online (Sandbox Code Playgroud)

外壳以 退出[Process completed],使外壳无用......那么我应该如何解决这个问题?

Mat*_*Mat 16

尝试这个:

cd() { builtin cd "$@" && ls; }
Run Code Online (Sandbox Code Playgroud)

builtin使cd函数内部调用内置cd命令,而不是尝试递归调用函数。

  • 这些是别名,而不是函数。它们的工作方式不同。试试 `foo() { echo hello ; 富; }; foo;`(准备好你的 Ctrl-C)。 (3认同)
  • 使用 `builtin cd "$@" && ls;` 可能更好,这样如果进入目录时出现问题(不存在等),`ls` 就不会运行,就像 John Ledbetter 在他的回答中提到的那样。 (3认同)