出于好奇,假设您创建了此函数:
cd () { echo 'hi'; }
现在,每当您输入 cd
时,您都会看到“hi”。如果您想使用原始的 cd 命令,可以执行以下操作:
builtin cd
但是如果我也创建了这个呢:
builtin() { echo 'haha, got ya!'; }
现在,如何获取 builtin
或 cd
的内置命令?
最佳答案
好的,首先不要覆盖 builtin
命令,我认为您不是故意这样做的。考虑到您可以覆盖所有内置函数,我想出了一个更荒谬的路线:
#!/bin/bash
builtin() { echo "Ha"; }
cd() { echo "Ha"; }
pwd() { echo "foobar"; }
result=$(/bin/bash --noprofile --norc -c "\\cd /home/cwgem/testdir; \\pwd; \\ls" )
/bin/echo "$result"
结果:
$ bash test.sh
/home/cwgem/testdir
test.txt
这里的想法是:
- 使用无法作为函数重写的函数的绝对路径(当然,这是假设您不会乱用
/bin/bash
和/bin/echo
) - 利用
$()
是语法命令替换,我无法覆盖它 - 调用
bash
与--noprofile
和--norc
,这很明确,不在可能包含覆盖的常用文件中进行采购 - 最后
\
在命令前面添加 ,以防别名 float
也就是说,所有这些黑客行为都是出于学术好奇心,不应该应用于现实世界。
关于bash - 如何获取内置命令的内置?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15208600/