用函数覆盖后如何获取原始系统命令?

Pro*_*oob 4 command-line bash alias functions bashrc

我现在正在参加 Hackathon,所以如果有人能尽快回答这个问题,你会帮我一个大忙。

我在 .bashrc 中编写了一个名为 ls() 的函数,如下所示:

ls() {

  if(some condition);
    do something
  else
    ls; #(CALL TO ORIGINAL ls SYSTEM CALL)
  fi

}
Run Code Online (Sandbox Code Playgroud)

但是这里到了else部分,就进入了无限循环

如何在 else 中调用原始 ls 系统调用,或者,如何使 ls 在一个文件夹中的行为与其他文件夹中的行为不同。

Nyk*_*kin 8

您正在寻找command

命令 [-pVv] 命令 [arg ...]

使用 args 运行命令以抑制正常的 shell 函数查找。仅执行在 PATH 中找到的内置命令或命令。如果给出 -p 选项,则使用 PATH 的默认值执行搜索命令,该值保证可以找到所有标准实用程序。如果提供了 -V 或 -v 选项,则会打印命令说明。-v 选项导致显示用于调用命令的命令或文件名的单个单词;-V 选项亲?导致更详细的描述。如果提供了 -V 或 -v 选项,则在找到命令时退出状态为 0,否则为 1。如果没有提供任何选项并且发生错误或找不到命令,则退出状态为 127。否则,

例子:

$ pwd() {
> echo 'command test'
> command pwd
> }
$ pwd
command test
/etc
Run Code Online (Sandbox Code Playgroud)

还有builtin,这是更严格的:

内置 shell-builtin [参数]

执行指定的 shell 内置命令,传递参数,并返回其退出状态。这在定义名称与 shell 内置函数相同的函数时很有用,在函数中保留内置函数的功能。cd 内置函数通常以这种方式重新定义。如果 shell-builtin 不是 shell 内置命令,则返回状态为 false。