1

我需要有关加载具有内置 platform_check 脚本的软件的帮助。我的计划是创建一个名为 uname 的脚本,该脚本在执行时将打印一个接受的平台。该脚本按我的需要工作,但我不知道如何让 uname 命令搜索我的自定义 uname 脚本而不是 /bin/uname 默认值。我曾尝试使用 PATH 类似 PATH=~/.../path_to_uname:$PATH 这不起作用。我没有 root 访问权限,所以我不能只在其默认位置编辑/创建 uname。

当我像这样执行脚本时: exec /directory_to_uname/uname 和 /directory_to_uname/uname -r 都按我的意图工作,我只需要欺骗 shell 来查找我的自定义 uname。

4

3 回答 3

1

您可以尝试使用trickshell 的别名。例如(使用 bash)编辑 ~/.bashrc 并添加alias uname='path/to/uname uname'. 执行source ~/.bashrc,命令 uname 将从别名中获取。如果alias uname='ls -lha'在执行时更改它并加载(源命令),uname它将列出文件/目录。

于 2021-12-22T02:22:43.540 回答
1

假设您有一个这样调用 uname 的平台检查脚本,我们将其命名为 test.sh:

#!/bin/bash
uname

初始运行按预期显示 uname:

user@computer:~$ ./test.sh 
Linux

将 uname 作为 bash 函数导出到echo要用于欺骗的函数:

user@computer:~$ function uname {
> echo "hello"
> }
user@computer:~$ export -f uname
user@computer:~$ ./test.sh 
hello
于 2021-12-22T02:27:41.050 回答
0

为了知道在命令期间访问/使用了哪些文件,您可以使用以下strace命令:

strace -y uname

你会得到一大堆使用的文件和进程,你可能会看到是否有任何可以适应你的需要。

但是,这非常危险(谁知道可能会产生什么副作用?)因此我建议您创建和aliasforuname命令。

于 2021-12-22T13:04:29.287 回答