如何更改uname命令搜索uname的位置



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

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

您可以尝试使用别名来trick外壳。例如(使用bash(编辑~/.bashrc并添加alias uname='path/to/uname uname'。执行source ~/.bashrc,命令uname将从alias中获取一个。如果将其更改为alias uname='ls -lha',并在执行uname时加载(源命令(,它将列出文件/dir。

假设您有一个平台检查脚本正在调用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

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

strace -y uname

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

然而,这是非常危险的(谁知道可能会有什么副作用?(因此,我建议您为uname命令创建和alias

最新更新