是否可以在 linux 上更改“./”的功能?

Is possible to change functionality of "./" on linux?

有没有什么方法可以使用 alias ./ = "..." 或其他命令来做到这一点?

这在原则上是您所说的 shell 的功能。您的 alias 语法类似于 Bash 和 the POSIX shell 的别名命令的语法,因此我们将从那里开始。我无法理解为什么符合要求的 POSIX shell 会拒绝

alias ./=...

./定义一个别名,但是

  1. bash 4.4 不接受它(“bash:别名:`./':无效的别名”)。这可能是 non-conformance 的一个要点,但意义不大,因为

  2. 这样的别名不会产生我想象中您正在寻找/关注的效果,因为别名只有在它们作为一个整体出现时才会被识别(shell) 单词。因此,虽然别名替换原则上可以应用于命令 ./ ls 中的 ./,但 ./ 的别名与命令 ./ls 无关。 =23=]

对于补充视图,请考虑 tcsh 6.20。这是 shell 的 csh 家族的成员,所以不是 POSIX shell,但这个家族也有一个 alias 命令,这个特殊的 shell 是否允许您使用别名 ./。范例

$ tcsh
$ alias ./ echo
$ ./ foo
foo

但是在这个家族中,别名替换也只适用于整个单词:

$ ./foo
./foo: Command not found.

至于替代方法,另一种尝试在 POSIX-ish shell(例如 Bash 中重新定义通用命令的可能方法是定义 shell 同名函数。但是,对于包含 / 字符的单词来说这不是问题,因为函数名称不能包含该字符。 (并且 csh 家族中的 shells 不提供函数。)

但是如果您担心的是您的代码在 运行 受到威胁的系统上可能产生的影响,那么最终无法保证。足够深的系统妥协可以用自定义版本替换任何或所有已安装的 shells,可以用自定义版本替换标准 ELF 加载程序(这样编译的程序也不安全),甚至可以替换具有自定义版本的内核。

因此,如果您不信任该系统,那么您需要提供您自己的整个系统:一个带有内核和足够工具的可引导映像,由您选择和审查,以执行您想执行的操作。这类似于救援映像:它可以通过挂载主机文件系统来检查它们,但它不会 运行 那里的任何程序。这也具有可测试性的优点。您不必尝试确保您的代码在每个环境中都做正确的事情,而只是确保它在您为其构建的环境中做正确的事情。