Bash
執行腳本時如何強制使用特定的二進製文件
如何在執行 bash 腳本時強制使用特定的二進製文件?
我有一個使用“php”二進製文件的 bash 腳本。
我的電腦上有幾個 php 版本。通過 PATH 變數配置的主 php 二進製文件不是在這種情況下使用的那個。
通常腳本會像這樣執行:
./script.sh
我需要這樣的東西:
php=/usr/bin/php ./script.sh
注意:臨時更改此命令的 PATH 變數不是一個選項,因為這會影響其他依賴項。
在腳本中硬編碼也不是一種選擇,因為該腳本被多人使用。因此,當其他人執行腳本時,它應該只使用 PATH 變數中指定的主 php 二進製文件。
我不希望它可以通過變數訪問。我實際上想指定查找二進製文件的確切位置。就像它通常使用 PATH 所做的那樣,只是現在只有一個具有絕對路徑的二進製文件。如果此腳本呼叫另一個腳本,則第二個腳本也需要使用該 php 版本。–
這會起作用:
php() { /path/to/your/php $@; }; export -f php; ./script.sh ; unset -f php
分解它:
php() { /path/to/your/php $@; };
定義一個將其所有參數傳遞給您提供的 php 路徑的 shell 函式。
export -f php
導出新創建的函式以在腳本中使用
./script.sh
執行你的腳本
unset -f php
刪除我們之前定義的 shell 函式。
一種方法是在腳本中添加一個額外的變數:
PHP=$1 if [ -z $PHP ]; then PHP=php fi
然後,如果您在不指定任何內容的情況下執行它,它將使用預設的 PHP 二進製文件。否則,它將使用您將通過變數的那個
./script.sh /usr/bin/php