是否有某种方法可以使用alias ./ = "..."
或其他命令来执行此操作?
原则上,这是您所说的shell的一个函数。您的alias
语法类似于Bash和POSIXshell的别名命令的语法,因此我们将从这里开始。我很难理解为什么一个合格的POSIX外壳会拒绝
alias ./=...
定义./
的别名,但
bash 4.4不接受它("bash:alias:`./':无效别名"(。这可能是不符合的一点,但它没有什么意义,因为
这样的别名不会产生我想你正在寻找/关心的效果,因为别名只有在它们作为一个整体(shell(单词出现的地方才能识别。因此,尽管原则上可以将别名替换应用于命令
./ ls
中的./
,但是./
的别名将与命令./ls
无关。
对于补充视图,请考虑tcsh 6.20。这是csh shell家族的一个成员,所以不是POSIX shell,但这个家族也有一个alias
命令,并且这个特定的shell允许您别名./
。示例
$ tcsh
$ alias ./ echo
$ ./ foo
foo
但在这个家族中,别名替换也只适用于整个单词:
$ ./foo
./foo: Command not found.
至于其他方法,对于试图在类似POSIX的shell(如Bash(中重新定义通用命令的人来说,另一种可能的方法是定义一个同名的shell函数。但是,对于包含/
字符的单词来说,这不是问题,因为函数名不能包含该字符。(csh系列中的shell不提供功能。(
但是,如果你担心的是如果你的代码在一个受损的系统上运行可能会产生的影响,那么最终就没有保证了。一个足够深入的系统折衷可以用定制版本替换任何或所有安装的shell,可以用定制的版本替换标准ELF加载程序(这样编译的程序也不安全(,甚至可以用定制版替换内核。
因此,如果你不信任系统,那么你需要提供一个完整的系统:一个带内核的可引导映像和足够的工具,由你选择和审查,以完成你想做的事情。这类似于救援映像:它可以通过装载主机文件系统来检查主机文件系统,但不会在那里运行任何程序。这也具有可测试性的优点。你不必试图确保你的代码在每个环境中都做正确的事情,而只需要确保它在你为它构建的环境中做正确的事