覆盖特定用户的二进制路径


8

我的问题似乎微不足道,但我没有找到任何对互联网有帮助的东西。我有一个二进制文件

/urs/bin/binary

但是它已经过时了,例如在某些安装架上有较新的版本

/mount/new_version/binary

有一个bash脚本,它以如下形式调用此二进制文件

binary -doSomething

我需要此脚本来调用二进制的新版本,而不是旧版本,但是我无权更改此脚本。是否有办法以某种方式覆盖它的路径,但仅适用于我的用户?任何帮助,将不胜感激。


如果您不允许这样做,请与管理员联系。
斯文

Answers:


11

如果二进制文件位于其中,/usr/bin/binary并且脚本在不指定完整路径的情况下调用了二进制文件,而是依靠存在于/usr/bin其中,PATH则只需将新二进制文件的位置添加到用户的开头PATH。在他们的内容中放入以下内容~/.bashrc

PATH=/mount/new_version:$PATH

出于安全原因,脚本通常指定二进制文件的完整路径以防止此类情况。


3

如果可以访问二进制文件,则可以对其进行备份并创建符号链接。

mv /urs/bin/binary /urs/bin/binary.bkp
ln -s /mount/new_version/binary /urs/bin/binary

[编辑]

抱歉,没有看到所做的更改仅应由一个用户完成。

您可以创建一个要调用的函数,而不是二进制文件。

根据执行二进制文件(完整路径或只是名称)的方式,必须创建一个合适的函数,例如:

# Full path
function /urs/bin/binary () { command /mount/new_version/binary "$@"; }
export -f /urs/bin/binary
# Name
function binary () { command /mount/new_version/binary "$@"; }
export -f binary

如果二进制文件不接受/不需要参数,则删除“ $ @”

要自动执行功能创建,请将功能行放在用户主目录的.profile文件中。


这将影响所有用户。不可以
维克多·斯托宾

抱歉,我更正了答案,因为更改只能影响一个用户。
Douglas P.

3

alias commandname=/mount/new_version/binary

在路径声明/导出上方的.bashrc中或配置文件中,将可以轻松完成。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.