如何在linux中自动执行cd和然后ls?


7

我发现自己一直保持cd some_dir快速动作ls,并且已经有一段时间了,并且一直在尝试编写bash别名让我执行此操作,例如:

alas cd="cd $@; ls";

问题是您不能在别名中间输入参数(如果输入错,请更正)。

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

cd() { cd "$@"; ls; }

但是与此有关的问题是,如果我尝试像这样使用它:

cd Documents

外壳退出[Process completed],使外壳无用...那么我应该如何解决呢?


1
我希望有alas一个内置的外壳。

我建议您不要这样做。将别名命名为“ cdl”或其他名称。否则,您会养成这种习惯。更糟糕的是:您可能会遇到不想ls的情况。例如,当处理远程文件系统时,它可能很慢。运行时make,脚本可能cd很多,并且放慢脚本速度没有任何意义。简而言之,出于习惯,您最好不要与已知的广泛部署的本机命令冲突。
TOOGAM

@RobDavis您所说的“ alas”程序是什么?(自您发表评论以来,我已经过去了三年半。)这是一个带有主页的第三方程序吗?
TOOGAM

@TOOGAM鉴于Rob Davis似乎不再拥有有效帐户,您可能不会得到他的答案。但我怀疑他指的是单词“的含义 ”的悲哀和表达没有任何具体的计划。
6

Answers:


14

尝试这个:

cd() { builtin cd "$@" && ls; }

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


递归实际上有风险吗?我可以alias ls='ls --color',并且不会递归。也不'alias rm='rm -i'
大卫偏航

3
这些是别名,不是函数。它们的工作方式不同。试试 foo() { echo hello ; foo; }; foo;(准备好Ctrl-C)。
Mat

嗯,很对,没有引起足够的重视。
David Yaw 2012年

3
最好改成builtin cd "$@" && ls;这样,以便在ls进入目录时遇到问题(不存在等)时不运行,例如John Ledbetter在回答中提到的那样。

是的,那要好得多;没想到,谢谢。
2012年


0

我想出了一个Bash脚本,应该可以实现这一目标。

# Automatically do an ls after each cd
cd() {
  if [ -n "$1" ]; then
    builtin cd "$@" && ls --group-directories-first
  else
    builtin cd ~ && ls --group-directories-first
  fi
}

-1
     alias cd='cd $@ &&  ls $@ --color '

cd任何目录名称都可以显示所有内容。在.bashrc文件中将别名设置为cd命令并运行。.bashrc文件。到处都有变化


如果我没记错的话,别名永远不会带有参数,它们只会替换字符串,因此永远不会起作用。您是否先尝试过?
卡尔斯·阿尔科利亚
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.