我最近在尝试使用shell函数,目的是覆盖
为了启用它,我决定使用“-y”作为开关,因为:
它的表现如预期一样(没有输出),但是:
ls
命令。我的意图是让shell首先调用我的ls
函数,然后如果第一个开关是“-y”,则执行一些操作,否则调用常规的/bin/ls
。但结果表现出我不理解的行为。为了启用它,我决定使用“-y”作为开关,因为:
$ ls -y
ls: invalid option -- 'y'
Try `ls --help' for more information.
因此,它不能破坏ls
的核心功能。无论如何,将问题简化,并且使用其他几个示例来帮助突出问题:
$ function ls() { [[ "y$1" == "y-y" ]] && echo LS ; }
$ function less() { [[ "y$1" == "y-y" ]] && echo LESS ; }
$ function try() { [[ "y$1" == "y-y" ]] && echo TRY ; }
所以我正在覆盖ls
,less
并定义try
,它类似于“控制”标本 :)
现在这样调用:
$ ls ; less ; try
它的表现如预期一样(没有输出),但是:
$ ls -y ; less -y ; try -y
LESS
TRY
ls
命令无法正常工作,但less
覆盖命令和"control"命令可以正常工作。
在stackoverflow或askubuntu的其他地方(但我暂时找不到参考资料)中,我看到了一个示例,暗示ls
是内置命令,但实际上:
$ which ls
/bin/ls
并且:
$ builtin ls
bash: builtin: ls: not a shell builtin
所以在我的系统上似乎没有这个问题(即使有也不清楚为什么会出现这种情况)。
我想知道这是什么原因?虽然这不重要,但我想了解发生了什么。
谢谢。