Linux

覆蓋特定使用者的二進制路徑

  • January 20, 2016

我的問題似乎微不足道,但我沒有設法在網際網路上找到任何有用的東西。我有一個二進製文件

/urs/bin/binary

但是它已經過時了,例如在某些安裝上可以使用更新的版本

/mount/new_version/binary

有一個 bash 腳本以如下形式呼叫此二進製文件

binary -doSomething

我需要這個腳本來呼叫新版本的二進製而不是舊版本,但我無權更改這個腳本。是一種以某種方式覆蓋它的路徑但僅適用於我的使用者的方法嗎?任何幫助,將不勝感激。

如果二進製文件在/usr/bin/binary其中並且腳本在沒有指定完整路徑的情況下呼叫二進製文件,而是依賴於在/usr/bin其中,PATH那麼您可以簡單地將新二進製文件的位置添加到使用者的PATH. 把這樣的東西放在他們的~/.bashrc

PATH=/mount/new_version:$PATH

出於安全原因,腳本通常會指定二進製文件的完整路徑以防止此類事情發生。

如果您有權訪問二進製文件,則可以備份它並創建符號連結。

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 文件中。

引用自:https://serverfault.com/questions/548320