Bashスクリプトを実行するときに特定のバイナリを強制する方法は?
「php」バイナリを使用するbashスクリプトがあります。
私のコンピュータにはいくつかのPHPバージョンがあります。 PATH変数で設定されたデフォルトのPHPバイナリは、この例で使用されているバイナリではありません。
通常、スクリプトは次のように実行されます。
./script.sh
次のようなものが必要です。
php=/usr/bin/php ./script.sh
注:このコマンドに対してのみPATH変数を一時的に変更することはできません。これは他の依存関係に影響を与えるからです。
スクリプトは複数の人が使用するため、スクリプトにハードコードすることもオプションではありません。したがって、他の人がスクリプトを実行するときは、PATH変数で指定されたデフォルトのPHPバイナリのみを使用する必要があります。
変数を介してアクセスできるようにしたくありません。実際にバイナリを見つける正確な場所を指定したいと思います。通常、PATHで行われているように、これは絶対パスを持つ単一のバイナリに対してのみ機能します。このスクリプトが別のスクリプトを呼び出す場合、2番目のスクリプトもそのPHPバージョンを使用する必要があります。 –
答え1
これは働きます:
php() { /path/to/your/php $@; }; export -f php; ./script.sh ; unset -f php
それを破壊する:
php() { /path/to/your/php $@; };
指定したPHPパスにすべての引数を渡すシェル関数を定義します。
export -f php
スクリプトで使用するために新しく生成された関数のエクスポート
./script.sh
スクリプトを実行してください
unset -f php
前に定義したシェル関数を削除します。
答え2
1つの方法は、スクリプトに追加の変数を追加することです。
PHP=$1
if [ -z $PHP ]; then
PHP=php
fi
その後、何も指定せずに実行すると、デフォルトのPHPバイナリが使用されます。それ以外の場合は、変数を介して渡すものを使用します。
./script.sh /usr/bin/php
答え3
$ hash /usr/local/bin php
$ php file.php
助ける:
$ LANG=C help hash
hash: hash [-lr] [-p pathname] [-dt] [name ...]
Remember or display program locations.
Determine and remember the full pathname of each command NAME. If
no arguments are given, information about remembered commands is displayed.
Options:
-d forget the remembered location of each NAME
-l display in a format that may be reused as input
-p pathname use PATHNAME is the full pathname of NAME
-r forget all remembered locations
-t print the remembered location of each NAME, preceding
each location with the corresponding NAME if multiple
NAMEs are given
Arguments:
NAME Each NAME is searched for in $PATH and added to the list
of remembered commands.
Exit Status:
Returns success unless NAME is not found or an invalid option is given.
答え4
あなたは言う注:このコマンドに対してのみPATH変数を一時的に変更することはできません。これは他の依存関係に影響を与えるからです。が、正しく行う場合はオプションだと思います。
以下を含む個人ディレクトリを作成できます。ただ必要に応じて、php
その個人ディレクトリを自分のPATHに最初のディレクトリとして配置します。このプライベートPATHエントリは、php
他のPATH依存関係に影響を与えず、そのバイナリのみを見つけるようにシェルに影響します。スクリプトを実行している他の人はPATHを使用しないため、影響はありません。たとえば、
$ mkdir -p "$HOME/myphp"
$ ln -s /usr/bin/php "$HOME/myphp/"
$ PATH=$HOME/myphp:$PATH
$ ./script.sh
上記の方法は、1 つのphp
プログラムにのみ影響を与え、他のプログラムには影響を与えず、お客様にのみ影響を与え、他のプログラムには影響しません。
もちろん、実行しているコマンドのみがこのバージョンを使用するように、アカウントのシェル起動ファイルに新しいPATH定義を配置できますphp
。