スクリプトを実行するときに特定のバイナリを強制的に使用する方法

スクリプトを実行するときに特定のバイナリを強制的に使用する方法

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

関連情報